GET과 POST
GET과 POST는 HTTP 메서드로 클라이언트에서 서버에 정보를 요청할 때 사용한다.
GET은 가져온다는 개념이고, POST는 수행한다는 개념으로 받아들이면 쉽다.
GET
클라이언트에서 서버로 어떠한 리소스로 부터 정보를 요청하기 위해 사용되는 메서드이다. 쉽게 말하자면, 데이터를 읽거나(Read), 검색(Retrieve) 할 때에 사용되는 메서드라고 할 수 있다.
- 요청할 때 필요한 데이터를 Body에 담지 않고, 쿼리 스트링을 통해 전송한다.
- GET을 통한 요청은 URL 주소 끝에 파라미터로 포함되어 전송되며, 이 부분을 쿼리 스트링(query string)이라고 부른다.
- 예시
www.example.com/show?name1=value1&name2=value2- 쿼리 스트링을 포함한 URL이다.
- 서버에서는
name1과name2라는 파라미터 명으로 각각value1과value2의 파라미터 값을 전달 받을 수 있다. - 만약 요청 파라미터가 여러 개이면
&로 연결한다.
- 파라미터에 내용이 노출되기 때문에 민감한 데이터를 다룰 때 GET 요청을 사용해서는 안된다.
- 데이터가 담기는 곳
- HTTP 패킷 Header
- GET 요청은 브라우저 히스토리에 남는다.
- GET 요청은 북마크가 될 수 있다.
- GET 요청은 길이 제한이 있다.
- GET 요청의 길이 제한은 표준이 따로 있는건 아니고 브라우저마다 제한이 다르다고 한다.
- GET 요청은 불필요한 요청을 제한하기 위해 요청이 캐시될 수 있다.
- GET을 통해 서버에 리소스를 요청할 때 웹 캐시가 요청을 가로채서 서버로부터 리소스를 다시 다운로드 하는 대신 리소스의 복사본을 반환한다.
- HTTP 헤더에서
cache-control 헤더를 통해 캐시 옵션을 지정할 수 있다.
POST
클라이언트에서 서버로 리소스를 생성하거나 업데이트하기 위해 데이터를 보낼 때 사용되는 메서드이다.
- GET과 달리 전송할 데이터를 HTTP 메세지의 Body에 담아서 전송한다.
- Body의 타입은 요청 헤더의 Content-Type에서 설정해주어야 한다.
- 타입을 선언하지 않으면 서버는 내용이나 URL에 포함된 리소스의 확장자명으로 데이터 타입을 유추한다.
- 알 수 없는 경우에는 application/octet-stream으로 요청을 처리한다.
- 데이터가 담기는 곳
- HTTP 패킷 Body
- POST 요청은 브라우저 히스토리에 남지 않는다.
- POST 요청은 북마크 되지 않는다.
- POST 요청은 데이터 길이에 제한이 없다.
- POST 요청은 캐시되지 않는다.
GET과 POST의 차이점
| GET | POST | |
|---|---|---|
| 사용 목적 | 서버의 리소스에서 데이터를 요청할 때 사용한다. | 서버의 리소스를 새로 생성하거나 업데이트할 때 사용한다. |
| 요청에 body 유무 | URL 파라미터에 요청하는 데이터를 담아 보내기 때문에 HTTP 메시지에 body❌ | body에 데이터를 담아 보내기 때문에 HTTP 메시지에 body⭕ |
| 멱등성(Idempotent) | 멱등이다 | 멱등이 아니다. |
-
GET과 POST를
DB로 비유하자면- GET은
SELECT에 가깝다. - POST는
CREATE에 가깝다.
- GET은
-
멱등이란?
- 사전적 의미: 연산을 여러번 적용하더라도 결과가 달라지지 않는 성질
- GET
- 리소르를 조회한다는 점에서 여러번 요청하더라도 응답이 똑같을 것이다.
- POST
- 리소스를 생성하거나 업데이트할 때 사용되기 때문에 멱등이 아니다.
- POST로 서버 리소스가 변경될 수 있다.
Reference
(네트워크) get과 post의 차이
(web) Get과 Post의 차이를 알아보자
Get과 Post의 차이를 아시나요?(tistory)
Get과 Post의 차이를 아시나요?(velog)