CS/네트워크

[네트워크] GET 과 POST의 차이

연듀 2023. 4. 12. 21:37

 

 

HTTP 메소드 중 GET 과 POST에 대해 자세히 살펴보려 한다. 

 

 

GET

클라이언트에서 서버로 어떠한 리소스로부터 정보를 요청하기 위해 사용되는 메서드

데이터를 읽거나, 검색할 때 사용된다고 할 수 있다. 

GET을 통한 요청은 URL 주소 끝에 파라미터로 포함되어 전송되며, 이 부분을 query string이라고 부른다.

 

파라미터인 name1과 name2를 통해 값을 전달 받을 수 있다. 요청 파라미터가 여러개면 &로 연결한다. 

ex) www.example.com/show?name1=value&name2=value2

 

 특징

  • 캐시가 가능하다.
    • GET을 통해 서버에 리소스를 요청할 때 웹 캐시가 요청을 가로채 서버로부터 리소스를 다시 다운로드 하는 대신 리소스의 복사본을 반환한다. HTTP 헤더를 통해 캐시 옵션을 지정할 수 있다.
  • 파라미터에 정보가 노출되어 버리기 때문에 중요한 정보를 다루면 안된다.
  • 데이터를 요청할 때만 사용된다.
  • 길이 제한이 있다.(브라우저마다 제한이 다르다)
  • 브라우저 히스토리에 남는다.
  • 북마크에 추가할 수 있다.
  • 성공시, 200(Ok) HTTP 응답 코드를 XML, JSON뿐만 아니라 여러 데이터(html, txt등..), 여러 형식의 데이터와 함께 반환한다.

 

 

POST

클라이언트에서 서버로 리소스를 생성하거나 업데이트하기 위해 데이터를 보낼 때 사용되는 메서드

전송할 데이터를 HTTP 메시지의 body 부분에 담아서 서버로 보낸다.

body의 타입은 요청 헤더의 Content-Type에 따라서 결정 된다.

 

특징

  • 캐시되지 않는다.
  • 브라우저 히스토리에 남지 않는다.
  • 데이터 길이에 제한이 없어  GET과 달리 대용량 데이터를 전송할 수 있다. 
  • 북마크에 추가할 수 없다.
  • 자원 생성은 201(Created) HTTP 응답 코드를 반환한다.

 

GET과 POST의 차이점

  • 사용 목적
    • GET은 서버의 리소스에서 데이터를 요청할 때, POST는 서버의 리소스를 새로 생성하거나 업데이트할 때 사용한다.
    • DB로 따지면 GET은 SELECT 에 가깝고, POST는 Create 에 가깝다고 보면 된다.
  • 요청에 body 유무
    • GET 은 URL 파라미터에 요청하는 데이터를 담아 보내기 때문에 HTTP 메시지에 body가 없다.
    • POST 는 body 에 데이터를 담아 보내기 때문에 당연히 HTTP 메시지에 body가 존재한다.
  • 멱등성
    • GET 요청은 멱등이며, POST는 멱등이 아니다.

 

 

 

 

여기서 멱등이란, 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질을 의미한다.

GET은 리소스를 조회한다는 점에서 여러 번 요청하더라도 응답이 똑같을 것 이다.

반대로 POST는 리소스를 새로 생성하거나 업데이트할 때 사용되기 때문에 멱등이 아니라고 볼 수 있다. (POST 요청이 발생하면 서버의 상태가 변경될 수 있다.)

 

 

 

 

 

 

 

참고

https://www.w3schools.com/tags/ref_httpmethods.asp

https://noahlogs.tistory.com/35

https://velog.io/@songyouhyun/Get과-Post의-차이를-아시나요