HTTP Method에는 클라이언트가 서버로 요청을 보내는 방법인 GET과 POST 두 가지 방식이 있다.
나의 경우에는 보통 GET 만 주로 사용하였었는데 문득 POST는 언제 쓰는거지??라는 생각이 들었다.
그래서 GET과 POST 마치 패트와 매트같은 두 녀석을 알아보도록 하자!
패트와 매트.. 아는 사람이 있다면.. ㅎㅎ
먼저 나에게 익숙한 GET에 대하여 알아보도록 하겠다!
GET 요청은 자원에 대한 조회를 요청한다.GET은 요청을 전송 할 때 데이터를 Body가 아닌 HTTP 헤더인 URL주소 끝쪽으로 파라미터가 포함되어 전송 된다.Query String이라고 부른다.GET 예시
- 주소 끝에
?부분부터 요청 메세지(Query String)가 입력 된다.- 키 값 쌍으로 이루어져서 전송된다.
- 데이터가 여러 개인 경우
&기호를 사용한다.
ex) GET http://whichbeachsearch/pages/map/map.html?sendLat=37.82120833&sendLon=124.6792861
URL에 데이터가 노출된다.그리고 조금은 생소한 POST에 대해 알아보도록 하자!!
POST는 서버의 리소스를 새로 생성하거나 업데이트 할때 사용한다.POST 요청은 데이터를 Body에 담아서 전송한다.Query String에 데이터가 드러나지 않는다.Content-Type에 요청 데이터의 타입을 표시해줘야 한다.POST 예시
- JSON 데이터를 API에 게시
Host: foobar.example
Content-Type: application/json
Object- [{name1:value1},{name2:value2}]
| GET | POST | |
|---|---|---|
| 리소스 전달 방식 | URL 주소 끝으로 Query String | HTTP Body |
| 브라우저 기록 | 매개 변수가 웹 브라우저 기록에 남아있다. | 매개변수가 웹 브라우저 기록에 저장되지 않는다. |
| 데이터 유형 | 문자열 데이터 유형만 지원 | 문자열, 숫자, 이진 데이터와 같은 다양한 데이터 유형 지원 |
| 보안 | 데이터가 URL의 일부이기 때문에 중요 정보에 대해 안전하지 못하다 | 데이터가 브라우저 기록이나 웹 서버 로그에 저장되지 않아 GET보다는 안전하다 |
| 매개변수 | URL에 담겨서 보내지기에 2K 미만의 매개변수를 사용하는 것이 안전하며 일부 서버는 최대 64K까지 처리가 가능하다. | 파일 업로드를 포함한 매개변수를 서버로 보낼 수 있다. |
| 북마크 | GET 요청을 북마크 할 수 있다. | 요청을 북마크 할 수 없다. |
| 데이터 길이 제한 | 양식 데이터가 URL에 있어 길이가 제한되어 있다. 안전한 길이 제한은 대부분 2048자이지만 브라우저와 웹 서버에따라 다르다 | 제한 없음 |
| 성능 | URL에 값을 추가하는 단순한 특성으로 인해 POST에 비해 더 좋다. | HTTP 본문에 POST값을 포함시키는데 소요되는 시간으로 인해 GET보다 성능이 낮다. |
| 캐싱 | 대부분 캐싱이 가능하다. | 대부분 캐싱이 불가능하다. |
| HTTP 응답 코드 | 200 (OK) | 201 (Created) |
GET은 서버의 리소스에 데이터의 조회를 요청할 때 POST 서버의 리소스를 새로 생성하거나 업데이트 할 때 사용한다.
URL에 매개변수를 담아 보내기 때문에 HTTP 메세지에 body가 없다. body에 데이터를 담아 보내기 때문에 HTTP 메세지에 body가 존재한다.두 요청 메서드의 주요한 차이점 중 하나는 이 멱등성이라고 하는 특성이다.
메서드를 통해 요청을 보낼 때 한 번 보내는 것과 여러번 연속으로 보내는 것이 같은 효과를 지니고, 서버의 상태도 동일하게 남을 때, 해당 HTTP 메서드가 멱등성을 가졌다고 말한다.
"동일한 요청을 여러번 보내도 같은 효과, 결과를 지닌다."
GET, HEAD, PUT, DELETE 메서드는 멱등성을 가지며 POST는 멱등성을 가지지 않는다.
다시 말하면 GET의 경우 서버에게 동일한 요청을 여러번 전송해도 동일한 응답이 돌아와야 한다는 것을 의미한다. 서버의 데이터나 상태를 변경시키지 않아야 멱등성을 가지므로 주로 조회를 할 때 이 메서드 요청을 사용해야 한다.
반면 POST의 경우에는 멱등성을 띄지 않으므로 서버에게 동일한 요청을 보내는 경우 응답은 매번 다를 수 있기에 서버의 상태나 데이터를 변경시킬 때 사용한다.
POST는 서버의 무언가를 변경되도록 사용되기에 생성, 수정, 삭제 모든 경우에 사용할 수 있지만 각 역할에 대해 알맞은 Method를 사용하는 것이 바람직하다.
GET과 POST에 대해 알아보았는데.. GET의 경우에는 내가 진행한 프로젝트에서 URL로 매개 변수를 넘겨주어서 어떠한 동작을 하도록 구현한 적이 있어서 그런지 Query String의 사용법이 친숙하게 느껴졌다. 용어도 이제야 알았지만..
어쨌든 GET과 POST의 차이 그리고 어떤 경우에 쓰여야하는지.. 어떤 중요 차이점이 있는지 알게되었으니 추후에 서버로 무언가를 요청해야 할 때 적절하게 사용해야겠다!
.
.
.
.
.
.
.
참고한 자료 🙇🏻
[GURU99] GET Vs Post
[Velog] songyouhyun Get과 Post의 차이를 아시나요?
[CODEBRIDGE] Get vs Post
[tistory] kmyjn HTTP 메소드 중 GET 방식과 POST 방식 차이
[MDN] 멱등성