HTTP GET vs. POST

ujin·2022년 11월 20일
0

네트워크

목록 보기
4/9

HTTP

  • 웹상에서 클라이언트와 서버 간에 데이터를 주고받을 수 있는 프로토콜
  • 클라이언트가 HTTP 프로토콜을 통해서 서버에 요청을 보내면 서버는 요청에 맞는 응답 클라이언트에게 전송

GET과 POST란 HTTP 메서드로 클라이언트에서 서버로 무언가를 요청할 때 사용한다.

GET 방식

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방식은 적절하지 않다.

특징

  • URL에 쿼리 스트링(데이터)을 붙여서 서버에 전송
  • 데이터를 Header(헤더)에 포함하여 전송
  • URL에 정보들이 그대로 노출되기 때문에 POST 방식보다 상대적으로 보안에 취약
  • 캐싱이 가능
  • POST 방식보다 상대적으로 전송 속도가 빠름
  • 전송하는 데이터양에 한계가 있음 (브라우저마다 GET 요청 길이 제한 존재)
  • 브라우저 히스토리에 기록이 남음

POST 방식

POST 방식의 request는 HTTP Request Message의 Body 부분에 데이터가 담겨서 전송된다. 때문에 바이너리 데이터를 요청하는 경우 POST 방식으로 보내야 하는 것처럼 데이터 크기가 GET 방식보다 크고 보안면에서 낫지만 body의 데이터도 결국엔 크롬 개발자 도구, Fiddler와 같은 툴로 요청 내용을 확인할 수 있기 때문에 꼭 암호화를 해줘야 한다.

www.example-url.com/resources

GET에서 URL의 파라미터로 보냈던 name1=value1&name2=value2가 body에 담긴다고 생각하면 된다. 따라서 보내는 데이터의 양에 제한이 없어 대용량 데이터를 전송할 때는 POST 방식이 적합하다. 그리고

특징

  • 데이터들을 URL뒤에 붙여서 서버로 보내는 것이 아닌 Body에 담아서 전송
  • 요청 헤더의 Content-Type에 콘텐츠 타입을 명시
  • 데이터들이 URL에 노출되지 않기 때문에 GET 방식보다 상대적으로 보안적
  • 데이터들을 Body에 담기 때문에 서버로 보내는 데이터의 양은 제한 없음
  • URL에 데이터가 노출되지 않으므로 캐싱 불가
  • 클라이언트에서 인코딩, 서버에서 디코딩
  • 요청받는 시간제한 존재
  • 브라우저 히스토리에 기록이 남지 않음

GET vs. POST

이러한 특성을 이해한 뒤에는 어디에 적용되는 지를 알아봐야 그 차이를 이해할 수 있다. 우선 GET가져오는 것이다. 서버에서 어떤 데이터를 가져와서 보여준다거나 하는 용도이지 서버의 값이나 상태 등을 변경하지 않는다. SELECT적인 성향을 갖고 있다고 볼 수 있다. 반면에 POST서버의 값이나 상태를 변경하기 위해서 또는 추가하기 위해서 사용된다. Create적인 성향을 갖는다.

부수적인 차이점을 살펴보면 위에서 말했듯이 GET 요청은 브라우저에 캐싱할 수 있다. 때문에 POST 방식으로 요청해야 할 것을 보내는 데이터의 크기가 작고 보안적인 문제가 없다는 이유로 GET 방식으로 요청한다면 기본에 캐싱되었던 데이터가 응답될 가능성이 존재한다. 때문에 목적에 맞는 기술을 사용해야 한다.

  • 멱등성 ?
    : 연산을 여러 번 하더라고 결과가 달라지지 않는 성질을 의미하며, GET 요청의 경우 여러 번 요청해도 응답이 같지만 POST 요청의 경우엔 리소스를 새로 생성하거나 업데이트하므로 서버에게 동일한 요청을 여러 번 전송해도 응답은 항상 다를 수 있다.

요약

GET 방식은 이름 대로 무언가를 가져오는 것

POST 방식은 무언가를 만들거나 수정하는 것

profile
개발공부일기

0개의 댓글