Get
은 헤더만 가지고 있으며, 모든 필요한 데이터를 URL에 포함하여 요청한다.즉 get은 요청을 전송할 때 필요한 데이터를 Body에 담지 않고 쿼리 스트링을 통해 전송한다.
데이터를 읽거나(Read), 검색(Retrieve) 할때 사용되는 메서드이다. 같은 요청을 여러번 하더라도 항상 같은 응답을 받을수 있어서 데이터의 변형의 위험없이 사용할 수 있다. 따라서 이런 이유로 사용하면 안전하다고 간주된다.
- GET 요청은 캐시가 가능하다.
- : GET을 통해 서버에 리소스를 요청할 때 웹 캐시가 요청을 가로채 서버로부터 리소스를 다시 다운로드하는 대신 리소스의 복사본을 반환한다. HTTP 헤더에서 cache-control 헤더를 통해 캐시 옵션을 지정할 수 있다.
- GET 요청은 브라우저 히스토리에 남는다.
- GET 요청은 길이 제한이 있다.
- GET 요청은 중요한 정보를 다루면 안된다. (보안)
Post
는 헤더와 바디를 가지고있다. 리소스를 생성/변경하기 위해 설계 되었기 때문에 전송해야될 데이터를 HTTP 메세지의 body에 담아서 전송한다. 이처럼 post는 데이터가 body로 전송되고 내용이 눈에 보이지 않아 get보다 보안적인 면에서 안전하다고 생각할 수 있지만 post 요청도 크롬 개발자 도구, fiddler와 같은 툴로 요청 내용을 확인할 수 있기 때문에 민감한 데이터의 경우는 반드시 암호화해 전송해야한다. HTTP메세지의 body길이는 제한없이 데이터를 전송할 수 있다. 그래서 대용량 데이터를 전송할 수 있다.
- POST 요청은 캐시되지 않는다.
- POST 요청은 브라우저 히스토리에 남지 않는다.
- POST 요청은 데이터 길이에 제한이 없다.
GET 과 POST 의 차이점
GET과 POST의 특징만 보아도 차이가 나긴하지만 추가적으로 차이점을 정리해보면 다음과 같다.
- 사용목적 : GET은 서버의 리소스에서 데이터를 요청할 때, POST는 서버의 리소스를 새로 생성하거나 업데이트할 때 사용한다.
- DB로 따지면 GET은 SELECT 에 가깝고, POST는 Create 에 가깝다고 보면 된다.
- 요청에 body 유무 : GET 은 URL 파라미터에 요청하는 데이터를 담아 보내기 때문에 HTTP 메시지에 body가 없다. POST 는 body 에 데이터를 담아 보내기 때문에 당연히 HTTP 메시지에 body가 존재한다.
- 멱등성 (idempotent) : GET 요청은 멱등이며, POST는 멱등이 아니다.
멱등이란?