Notice
Recent Posts
Recent Comments
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

충분히 쌓여가는

GET방식 / POST 방식 본문

IT/Computer Science

GET방식 / POST 방식

빌드이너프 2023. 2. 3. 09:58

GET

  • 주로 데이터를 읽거나(Read) 검색(Retrieve)할 때에 사용되는 메소드
  • 클라이언트에서 서버로 어떠한 리소스로 부터 정보를 요청하기 위해 사용되는 메소드
  • 만약 GET요청이 성공적으로 이루어진다면 XML이나 JSON과 함께 200 (Ok) HTTP 응답 코드를 리턴함.
  • 에러가 발생하면 주로 404 (Not found) 에러나 400 (Bad request) 에러가 발생.

 

  • URL 값이 반영됨으로써 사용자에게 노출이 된다는 단점 존재.
  • URL로 이용하는 것이므로 길이제한(255바이트 미만)으로 인해 많은 양의 보내기에는 비적합함.

 

  • HTTP 명세에 의하면 GET 요청은 오로지 데이터를 읽을 때만 사용되고 수정할 때는 사용하지 않음.
  • 즉, 데이터의 변형의 위험없이 사용할 수 있다는 뜻이다. 게다가 GET 요청은 idempotent함.
  • 같은 요청을 여러 번 하더라도 변함없이 항상 같은 응답을 받을 수 있음.
  • 그러므로 GET을 데이터를 변경하는 등의 안전하지 않은 연산에 사용하면 안됨.
더보기

idempotent: 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질연산을 여러 번 반복하여도 한 번만 수행된 것과 같은 성질


POST

  • POST 메소드는 주로 새로운 리소스를 생성(create)할 때 사용됨.
  • => POST는 하위 리소스(부모 리소스의 하위 리소스)들을 생성하는데 사용됨.
  • 성공적으로 creation을 완료하면 201 (Created) HTTP 응답을 반환.
  • POST 요청은 안전하지도 않고 idempotent하지도 않음.
  • -> POST 요청을 반복해서 했을 때 항상 같은 결과물이 나오는 것을 보장하지 않는다는 것.
  • 그러므로 두 개의 같은 POST 요청을 보내면 같은 정보를 담은 두 개의 다른 resource를 반환할 가능성이 높음.

 

  • POST 또한 용량 제한은 있지만 GET보다 많은 양의 정보를 보낼 수 있음.
  • 사용자에게 값 노출이 되지 않음.

출처:  William Rågstad, What is Ajax?

GET/POST

  • GET 요청: 모든 필요한 데이터를 URL에 포함하여 요청
  • POST 요청: 클라이언트에서 서버로 전송할 때 추가적인 데이터를 body에 포함할 수 있음
  • HTML의 <form>태그에 method="POST" 또는 method="GET"(기본값)을 모두 사용할 수 있음.
  • GET 메소드 사용: 모든 form data는 URL로 인코딩되어 action URL에 query string parameters로 전달됨,
  • POST 메소드 사용: form data는 HTTP request의 message body에 나타날 것임.

 

  • GET: 어떤 데이터를 가져와서 보여준다거나 하는 용도로 서버의 값이나 상태를 바꾸는 것은 아님
  • POST: 서버의 값이나 상태를 바꾸기 위해 사용됨, 예를 들어 글을 쓰면 글의 내용이 DB에 저장되고 수정하면 DB값이 수정되는데 이럴 경우 POST 사용
GET/POST 방식 둘 다 브라우저가 서버에 요청하는 것

  GET POST
History Parameters remain in browser history because they are part of the URL.

파라미터들은 URL의 일부분이기 때문에 브라우저 히스토리에 남는다.
Parameters are not saved in browser history.

파라미터들이 브라우저 히스토리에 저장되지 않는다.
Bookmarked Can be bookmarked.

요청 파라미터들이 URL로 인코딩되므로 즐겨찾기가 가능하다.
Can not be bookmarked.

요청 파라미터들이 request body에 포함되고 request URL에 나타나지 않으므로 즐겨찾기가 불가능하다.
button/re-submit behaviour GET requests are re-executed but may not be re-submitted to server if the HTML is stored in the browser cache.

GET 요청이 다시 실행되더라도 브라우저 캐시에 HTML이 저장되어있다면 서버에 다시 submit되지 않는다.
The browser usually alerts the user that data will need to be re-submitted.

브라우저가 보통 사용자에게 데이터가 다시 submit되어야 한다고 alert을 준다.
Encoding type
(enctype attribute)
application/x-www-form-urlencoded multipart/form-data or application/x-www-form-urlencoded Use multipart encoding for binary data.
Parameters can send but the parameter data is limited to what we can stuff into the request line (URL). Safest to use less than 2K of parameters, some servers handle up to 64K

전송 가능하지만 URL에 넣을 수 있는 파라미터 데이터가 제한된다. 2K이하로 사용하는 것이 안전하며 몇몇 서버들은 64K까지 다룬다.
Can send parameters, including uploading files, to the server.

서버에 파일 업로드하는 것을 포함하여 파라미터를 전송할 수 있다.
Hacked Easier to hack for script kiddies

script kiddies에 의해 해킹되기 쉽다.
More difficult to hack

GET에 비해 좀 더 해킹하기 어렵다.
Restrictions on form data type Yes, only ASCII characters allowed.

오직 ASCII characters만 허용된다.
No restrictions. Binary data is also allowed.
제한이 없다. binary data도 허용된다.
Security GET is less secure compared to POST because data sent is part of the URL. So it's saved in browser history and server logs in plaintext.

GET은 POST에 비해 보안에 약하다. 그 이유는 데이터가 URL의 일부로 전송되고 그 때문에 브라우저 히스토리에 저장되며 서버가 플레인 텍스트로 로그를 남기기 때문이다.
POST is a little safer than GET because the parameters are not stored in browser history or in web server logs.

POST는 GET에 비해 보안에 조금 더 안전하다. 그 이유는 파라미터들이 브라우저 히스토리나 서버 로그에 저장되지 않기 때문이다.
Restrictions on form data length Yes, since form data is in the URL and URL length is restricted. A safe URL length limit is often 2048 characters but varies by browser and web server.

form data가 URL에 포함되고 URL 길이가 제한되기 때문에 form data의 길이도 제한된다. 안전한 URL 길이는 2048 characters이나 브라우저나 웹 서버에 따라 달라진다.
No restrictions

제한이 없다.
Usability GET method should not be used when sending passwords or other sensitive information.

GET 메소드는 비밀번호와 같은 민감한 정보들을 전송하는데 사용해선 안된다.
POST method used when sending passwords or other sensitive information.

POST 메소드는 비밀번호와 같은 민감한 정보를 전송하는데 사용된다.
Visibility GET method is visible to everyone (it will be displayed in the browser's address bar) and has limits on the amount of information to send.

GET 메소드는 모두에게 보여진다. (브라우저의 주소창에 그대로 보여지고 그에 따라 전송가능한 정보의 양도 제한된다.)
POST method variables are not displayed in the URL.

POST 메소드는 URL에 보여지지 않는다.
Cached Can be cached

GET은 idempotent하기 때문에 캐시가 된다.
(같은 요청을 여러 번 보내도 항상 같은 응답이 온다.)
Not cached
POST는 idempotent하지 않기 때문에 캐시가 되지 않는다.

(같은 요청을 여러 번 보내도 다른 응답이 올 수 있다.)

 

 

 


참고자료

빅토리TV, GET방식과 POST 방식의 차이점

REST API Tutorial, Using HTTP Methods for RESTful Services

Diffen, GET vs. POST

w3schools, HTTP Request Methods

Code Playground, [HTTP] HTTP Method 정리 / GET vs POST 차이점

William Rågstad, What is Ajax?

 

 

 

'IT > Computer Science' 카테고리의 다른 글

함수형 프로그래밍  (0) 2023.02.07
IPC(Inter Process Communication)  (1) 2023.02.06
Normalization 정규화  (0) 2023.02.02
Agile 애자일  (0) 2023.02.01
Test Driven Develop(TDD)  (0) 2023.01.31