공통점
브라우저가 서버에 요청하는 방식이다.
Get
서버로부터 정보를 요청할 때 사용하는 HTTP 메서드
특징
- 요청을 전송할 때 쿼리스트링을 통해 전송한다.
- 예 : www.xxx.xxx/resources?name1=value1&name2=value2
- 파라미터명 name1, name2 / 각각의 파라미터 value1, value2라는 값으로 요청을 보낸다.
- 데이터가 담기는 곳 : HTTP 패킷 Header
- 브라우저 히스토리에 남는다.
- 길이 제한이 있다.
- 중요한 정보를 다루면 안된다.
- 파라미터에 내용이 노출되기 때문에 중요한 정보를 다룰 때는 Get을 사용하지 않는다.
- 불필요한 요청 제한을 위해 캐시될 수 있다.
- 이미지와 같은 컨텐츠는 데이터의 양이 크고 반복될 일이 적기때문에 캐시되어 변경이 안되는 경우가 있다. 이것은 브라우저에 컨텐츠가 캐시될 수 있기 때문이다.
쿼리스트링
Post
정보를 생성/변경하기 위해 서버에 데이터를 보내는 HTTP 메서드
특징
- 요청을 전송할 때 HTTP 메세지의 Body에 담아 전송한다.
- Body의 타입은 헤더의 Content-Type에 설정해 주여아한다.
- Content-Type의 종류로는 application/x-www-form-urlencoded, text/plain, multipart/form-data 등이 있다
- 데이터가 담기는 곳 : HTTP 패킷 Body
- 캐시가 되지 않는다.
- 브라우저 히스토리에 남지 않는다.
- 요청은 데이터 길이에 제한이 없다.
차이
- 사용 목적 : Get은 서버에 리소스 요청 / Post는 리소스 생성 또는 수정
- 요청방식 : Get은 URL에 보냄 / Post는 Body에 보냄
- 멱등성 : Get은 멱등 O / Post 멱등 X
멱등이란
멱등 : 같은 연산을 여러번 하더라도 결과가 달라지지 않음
Get은 같은 리소스를 여러번 요청해도 같은 결과가 나온다.
Post는 리소스가 생성되거나 변경되기 때문에 같은 결과가 나오지 않을 수 있다.