HTTP의 GET과 POST 비교

junamee·2021년 7월 12일
0

네트워크

목록 보기
3/4
post-thumbnail

HTTP요청에는 여러가지 방법이 있고 가장 대표적인 GET과 POST가 있다.
보통 GET요청은 서버로 부터 정보를 받아와야할 경우,
POST요청은 서버의 정보를 수정, 추가해야하는 요청의 상황에 쓰인다.
GET과 POST의 비교 전, 요청 메시지의 형태를 먼저 간략히 파악하자.

✔참고: 요청 메시지 형태(예전정리글)

크게는 요청정보행/ 헤더/ 메시지 바디로 나누어 본다.

GET요청

요청헤더: GET/sample/search?q=token123 HTTP/1.1
결과웹페이지url : https://skawankk.com/sample/search?q=token123

GET 요청을 보낼 때는 URL이 사용되는데, URL에 요청경로+?+요청내용가 붙어 메시지 헤더(startline)에 포함되어 전송된다. 요청정보가 URL에 담겨있어 보낼 수 있는 데이터의 크기가 매우 제한적(1024 Byte)이어서 데이터 전송을 위한 방법보다는 필요한 정보를 받아올 때 쓰이게 되는 것이다. 또한, 보안이 필요한 데이터는 URL에 노출되니 다른 방법으로 요청을 보내야 한다.

브라우저에서 캐싱이 적용된다. 캐싱은 빈번한 요청에 대해 리로스의 복사본을 중복 요청을 보내지 않고 리소스복사본을 반환해주는데 따라서 서버의 부하를 완화하고 사용자는 요청때보다 더 빠르게 데이터를 반환받아 볼 수 있는 장점이 있다. 데이터가 변하지 않는 경우에 한해 캐싱이 적용된다. (동일 리소스를 제공하는 GET요청에 대한 응답, 영구적 리다이렉트(301)응답, 404결과 페이지 응답 등)

요청메시지 헤더에 Cache-Control이라는 필드가 있어 캐싱정책을 정의할 수 있다.
(리소스의 상태를 검증받고 사용할지의 여부나 캐쉬기한 설정, 캐쉬하지 않음 등의 조건이 있다.)

POST요청

GET요청이 헤더에 담겨보내지는 반면 POST요청은 메시지 바디(페이로드)에 담겨 전송된다. 때문에 보낼 수 있는 데이터의 크기도 더 크며 보안상으로도 나은 편이다. (하지만 메시지 바디를 열어볼 수 있기 때문에 보안이 완벽하지 않다.)

또한, GET요청과 다르게 캐슁이 되지 않는다. 아니 되지 않아야 한다.
POST는 새롭게 정보를 갱신하는 요청이므로 동일한 형태의 요청이라고 기존의 캐슁된 값을 반환하면 업데이트된 정보를 받아볼 수 없기 때문이다.

요청에 사용된 메소드는 자체적으로 캐시 가능하며 GET 또는 HEAD 메소드입니다. 신선도가 표시되고 Content-Location 헤더가 설정된 경우 POST 또는 PATCH 요청에 대한 응답을 캐시할 수도 있지만 이는 거의 구현되지 않습니다.
위와 같은 특징때문에 각 상황에 맞는 요청방법을 사용해야 한다.
(MDN)

*깨알비교: PUT, PATCH VS POST___멱등성 차이
멱등성이란 순수함수를 설명할때도 사용되는데
동일 요청 및 실행에 대하여 항상 같은 값을 반환한다는 것이다. 결과 값이 보장되는 것이다.
요청에 대해 예를들면 POST는 A=>A+B, 기존데이터에 새로운 데이터가 추가.
PUT은 A+B가 아닌 A=>B.기존 데이터를 아예 교체하는 것이다.
PATCH는 A=>A` 기존 데이터에서 일부 수정한 값이 변경 적용되는 경우이다.
즉, 항상 같은 결과값을 보이는 PUT은 멱등성을 갖고있다고 말할 수 있다.
(A가 C로 바뀌었다고 가정해봤을때 변경되지 않은 결과값은?)

profile
아티클리스트 - bit.ly/3wjIlZJ

0개의 댓글