HTTP 프로토콜이 제공하는 GET, POST 는 클라이언트가 서버에 요청할 때 사용된다.
HTTP 통신을 제대로 하기위해서 이 둘의 차이를 명확히 알고 사용해야 한다.
이 글에서는 GET 과 POST 방식이 각각 무엇인지 알아보고 둘의 차이점을 정리하려고 한다.
GET 은 클리이언트에서 서버로 어떠한 리소스의 정보를 요청하기 위해 사용되는 메서드이다.
즉, 데이터를 읽거나(Read) 검색(Retrieve)할 때 사용된다.
GET 을 통한 요청은 URL 주소 끝에 쿼리스트링
을 사용하여 값을 전달한다.
쿼리스트링(query string)
URL 끝에 ? 를 붙이고, 변수명1=값&변수명2=값...형식으로 이어 붙인다.
ex) www.example.com/show?key1=value1&key2=value2
서버에서는 key1과 key2 라는파라미터 명으로 각각 value1, value2 의 파라미터 값을 전달받을 수 있다.
파라미터에 정보가 노출이 되기 때문에 중요한 정보를 담지 않는다.
HTTP 헤더의 cache-control 을 통해 캐시 옵션을 지정할 수 있다.
POST는 줄 새로운 리소스를 생성(Create) 할 때 사용된다.
POST는 전송할 데이터를 HTTP 메시지 body 부분에 담아서 서버로 전송한다. (body 의 타입은 헤더의 Content-Type 에 따라 결정된다.)
POST로 데이터를 전송할 때 길이 제한이 따로 없어 용량이 큰 데이터를 보낼 때 사용하거나 GET처럼 데이터가 외부적으로 드러나는 건 아니라서 보안이 필요한 부분에 많이 사용된다.
POST를 통한 데이터 전송은 보통 HTML form 을 통해 서버로 전송된다.
body의 타입은 Header의 Content-Type 에 따라 결정된다.
GET | POST | |
---|---|---|
사용목적 | 서버의 리소스를 요청할 때 | 서버의 리소스를 생성하거나 업데이트할 때 |
History | 전달되는 파라미터들은 URL의 일부이기 때문에 브라우저 히스토리에 남는다. | 브라우저 히스토리에 저장되지 않는다. |
Bookmark | 요청 파라미터들은 URL로 인코딩되므로 즐겨찾기가 가능하다. | 요청 파라미터들이 request의 body에 포함되므로 URL에 나타나지 않으므로 즐겨찾기가 불가능하다. |
멱등성 | O | X |
Caching | O | X |
멱등성(idempotent) : 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질을 의미.
GET 은 같은 요청을 여러 번 요청해도 응답이 같다.
POST 는 리소스를 새로 생성하거나 업데이트할 때 사용되기 때문에 응답이 같지 않다.
GET과 POST 여러 차이가 존재하기 때문에 각 메서드를 이해하고 상황에 맞는 메서드를 사용해야한다.
GET 과 POST 이외에도 PUT, DELETE 도 존재하기 떄문에 이들과 같이 적절히 사용하는 것이 바람직하다.
https://noahlogs.tistory.com/35
https://dhan-description.tistory.com/76
https://mangkyu.tistory.com/17
MDN - 멱등성