GET과 POST란 HTTP 메서드로 클라이언트에서 서버로 무언가를 요청할 때 사용한다.
GET 방식은 요청하는 데이터가 HTTP Request Message
의 Header 부분에 URL이 담겨서 전송한다. Body 부분은 비어있고 Header에 콘텐츠 타입을 명시하는 Content-Type 헤더 필드도 적지 않는다. 아래와 같이 URL ?
뒤에 쿼리스트링(key와 value)을 붙이고 HTTP 헤더에 포함해서 서버에 데이터를 요청한다,
www.example-url.com/resources?name1=value1&name2=value2
이러한 방식은 URL이라는 공간에 담겨가기 때문에 전송할 수 있는 데이터의 크기가 제한적이다. 또 보안이 필요한 데이터에 대해서는 데이터가 그대로 URL에 노출되므로 GET
방식은 적절하지 않다.
POST 방식의 request는 HTTP Request Message
의 Body 부분에 데이터가 담겨서 전송된다. 때문에 바이너리 데이터를 요청하는 경우 POST 방식으로 보내야 하는 것처럼 데이터 크기가 GET 방식보다 크고 보안면에서 낫지만 body의 데이터도 결국엔 크롬 개발자 도구, Fiddler와 같은 툴로 요청 내용을 확인할 수 있기 때문에 꼭 암호화를 해줘야 한다.
www.example-url.com/resources
GET에서 URL의 파라미터로 보냈던 name1=value1&name2=value2가 body에 담긴다고 생각하면 된다. 따라서 보내는 데이터의 양에 제한이 없어 대용량 데이터를 전송할 때는 POST 방식이 적합하다. 그리고
이러한 특성을 이해한 뒤에는 어디에 적용되는 지를 알아봐야 그 차이를 이해할 수 있다. 우선 GET
은 가져오는 것이다. 서버에서 어떤 데이터를 가져와서 보여준다거나 하는 용도이지 서버의 값이나 상태 등을 변경하지 않는다. SELECT적인 성향을 갖고 있다고 볼 수 있다. 반면에 POST
는 서버의 값이나 상태를 변경하기 위해서 또는 추가하기 위해서 사용된다. Create적인 성향을 갖는다.
부수적인 차이점을 살펴보면 위에서 말했듯이 GET
요청은 브라우저에 캐싱할 수 있다. 때문에 POST
방식으로 요청해야 할 것을 보내는 데이터의 크기가 작고 보안적인 문제가 없다는 이유로 GET
방식으로 요청한다면 기본에 캐싱되었던 데이터가 응답될 가능성이 존재한다. 때문에 목적에 맞는 기술을 사용해야 한다.
GET 방식은 이름 대로 무언가를 가져오는 것
POST 방식은 무언가를 만들거나 수정하는 것