GET과 POST

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

GET은 가져온다는 개념이고, POST는 수행한다는 개념으로 받아들이면 쉽다.

GET

클라이언트에서 서버로 어떠한 리소스로 부터 정보를 요청하기 위해 사용되는 메서드이다. 쉽게 말하자면, 데이터를 읽거나(Read), 검색(Retrieve) 할 때에 사용되는 메서드라고 할 수 있다.

  1. 요청할 때 필요한 데이터를 Body에 담지 않고, 쿼리 스트링을 통해 전송한다.
    • GET을 통한 요청은 URL 주소 끝에 파라미터로 포함되어 전송되며, 이 부분을 쿼리 스트링(query string)이라고 부른다.
    • 예시
      • www.example.com/show?name1=value1&name2=value2
      • 쿼리 스트링을 포함한 URL이다.
      • 서버에서는 name1name2라는 파라미터 명으로 각각 value1value2의 파라미터 값을 전달 받을 수 있다.
      • 만약 요청 파라미터가 여러 개이면 &로 연결한다.
    • 파라미터에 내용이 노출되기 때문에 민감한 데이터를 다룰 때 GET 요청을 사용해서는 안된다.
  2. 데이터가 담기는 곳
    • HTTP 패킷 Header
  3. GET 요청은 브라우저 히스토리에 남는다.
  4. GET 요청은 북마크가 될 수 있다.
  5. GET 요청은 길이 제한이 있다.
    • GET 요청의 길이 제한은 표준이 따로 있는건 아니고 브라우저마다 제한이 다르다고 한다.
  6. GET 요청은 불필요한 요청을 제한하기 위해 요청이 캐시될 수 있다.
    • GET을 통해 서버에 리소스를 요청할 때 웹 캐시가 요청을 가로채서 서버로부터 리소스를 다시 다운로드 하는 대신 리소스의 복사본을 반환한다.
    • HTTP 헤더에서 cache-control 헤더를 통해 캐시 옵션을 지정할 수 있다.

POST

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

  1. GET과 달리 전송할 데이터를 HTTP 메세지의 Body에 담아서 전송한다.
    • Body의 타입은 요청 헤더의 Content-Type에서 설정해주어야 한다.
    • 타입을 선언하지 않으면 서버는 내용이나 URL에 포함된 리소스의 확장자명으로 데이터 타입을 유추한다.
    • 알 수 없는 경우에는 application/octet-stream으로 요청을 처리한다.
  2. 데이터가 담기는 곳
    • HTTP 패킷 Body
  3. POST 요청은 브라우저 히스토리에 남지 않는다.
  4. POST 요청은 북마크 되지 않는다.
  5. POST 요청은 데이터 길이에 제한이 없다.
  6. POST 요청은 캐시되지 않는다.

GET과 POST의 차이점

GETPOST
사용 목적서버의 리소스에서 데이터를 요청할 때 사용한다.서버의 리소스를 새로 생성하거나 업데이트할 때 사용한다.
요청에 body 유무URL 파라미터에 요청하는 데이터를 담아 보내기 때문에 HTTP 메시지에 body❌body에 데이터를 담아 보내기 때문에 HTTP 메시지에 body⭕
멱등성(Idempotent)멱등이다멱등이 아니다.
  • GET과 POST를 DB로 비유하자면

    • GET은 SELECT에 가깝다.
    • POST는 CREATE에 가깝다.
  • 멱등이란?

    • 사전적 의미: 연산을 여러번 적용하더라도 결과가 달라지지 않는 성질
    • GET
      • 리소르를 조회한다는 점에서 여러번 요청하더라도 응답이 똑같을 것이다.
    • POST
      • 리소스를 생성하거나 업데이트할 때 사용되기 때문에 멱등이 아니다.
      • POST로 서버 리소스가 변경될 수 있다.

Reference

(네트워크) get과 post의 차이
(web) Get과 Post의 차이를 알아보자
Get과 Post의 차이를 아시나요?(tistory)
Get과 Post의 차이를 아시나요?(velog)