서버로 부터 정보를 조회하기 위해 설계된 메서드이다.
GET
은 요청을 전송할 때 필요한 데이터를 Body
에 담지 않고 쿼리스트링
을 통해서 요청한다.
쿼리스트링은 URL 끝에 ?
를 사용하여 key 와 value 를 지정하여 요청을 보낸다.
요청 파라미터가 여러 개일 경우 &
연산자로 연결한다.
예를 들면, 아래와 같은 요청이 GET 요청이다.
https://www.coupang.com/vp/products/1234?itemId=99999&vendorItemId=1234
"프로덕트 1234 에서 {itemId
: 9999
} 그리고 {vendorItemId
:1234} 이 상품을 불러주세요"
하는 요청이다.
GET 은 불필요한 요청을 제한하기 위해서 요청이 캐시될 수 있다.
특히 js, css 와 같은 정적 컨텐츠는 데이터 양이 크고 변경될 일이 적어서 반복해서 동일한 요청을 보낼 필요가 없기 때문에, 캐시된 데이터를 사용한다.
따라서 가끔 정적 컨텐츠가 캐시되어, 컨텐츠를 변경해도 내용이 바뀌지 않는 경우가 있는데, 이 때는 캐시를 지워주고 다시 새로운 요청을 만들어야 한다.
리소트를 생성/변경 하기 위해 설계된 메서드이다.
GET
과 달리 전송해야 될 데이터를 HTTP 메세지의 Body
에 담아서 전송한다.
Body
는 길이의 제한없이 데이터를 전송할 수 있기 때문에, GET
과 달리 대용량 데이터를 전송할 수 있다.
POST
는 전송하는 내용이 쿼리스트링이 아닌 BODY
에 담겨지기 때문에 주소창에 보이지 않아 안전하다고 생각할 수 있지만, 개발자툴을 이용하여 얼마든지 요청을 확인할 수 있기 때문에, 민감한 데이터의 경우 반드시 암호화
하여 전송해야 한다.
GET
은 서버에게 동일한 요청을 여러번 전송하더라도 동일한 응답이 돌아와야 한다.
서버의 데이터나 상태를 변경시키지 않아야 하기 때문에 주로 조회를 할 때 사용한다.
예를 들어 웹페이지를 열어보거나 게시물을 조회하는 요청은 GET
으로 처리하게 된다.
POST
는 서버의 상태나 데이터를 변경시킬 때 사용된다.
따라서 서버에게 동일한 요청을 여러 번 전송해도 응답은 항상 다를 수 있다.
POST
는 생성/수정/삭제 에 사용될 수 있는데, 수정은 PUT 또는 PATCH, 삭제는 DELETE
가 더 용도에 맞는 메서드라고 할 수 있다.
하지만 이 모든걸 POST
로 처리할 수 있다.
POST
로 삭제 요청을 보낼 때, 실제로 물리삭제를 하지 않고, 논리삭제를 할 수 있기 때문이다.
참고자료:
https://hongsii.github.io/2017/08/02/what-is-the-difference-get-and-post/