GET은 클라이언트에서 서버로 어떠한 리소스로 부터 정보를 요청하기 위해 사용되는 메서드다.
GET을 통한 요청은 URL 주소 끝에 파라미터로 포함되어 전송되며, 이 부분을 쿼리 스트링이라고 부른다.
URL 끝에 ?를 붙이고 변수1=값&변수2=값... 형식으로 이어 붙이면 된다
www.example.com/lists?name=value1&type=value2
GET 요청은 브라우저 히스토리에 남는다.
GET 요청은 북마크 될 수 있다.
GET 요청은 길이 제한이 있다.
GET 요청은 중요한 정보를 다루면 안된다(보안)
GET은 데이터를 요청할 때만 사용 된다.
POST는 클라이언트에서 서버로 리소스를 생성하거나 업데이트를 하기 위해서
데이터를 보낼 때 사용되는 메서드다.
POST는 전송할 데이터를 HTTP 메세지 body 부분에 담아 서버로 보낸다
(body의 타입은 Content-Type 헤더에 따라 결정된다)
GET에서 URL의 파라미터로 보냈던 name=value1&type=value2 가 body에 담겨 보내진다고 생각하면 된다.
POST로 데이터를 전송할 때 길이 제한이 따로 없어 용량이 큰 데이터를 보낼 때 사용하거나
GET처럼 데이터가 외부적으로 드러나는건 아니라서 보안이 필요한 부분에서 많이 사용한다
(데이터를 암호화하지 않으면 body의 데이터도 결국 볼 수 있다.)
POST를 통한 데이터 전송은 보통 HTML form을 통해 서버로 전송된다.
POST 요청은 캐시되지 않음.
POST 요청은 브라우저 히스토리에 남지 않음.
POST 요청은 북마크 되지 않음.
POST 요청은 데이터 길이에 제한이 없음.
GET은 서버의 리소스에서 데이터를 요청할 때, POST는 서버의 리소스를 새로 생성하거나 업데이트할 때 사용
DB로 따지면 GET은 SELECT에 가깝고, POST는 CREATE에 가까움.
GET은 URL 파라미터에 요청하는 데이터를 담아 보내기 때문에 HTTP 메세지에 body가 없다.
POST는 body에 데이터를 담아 보내기 때문에 HTTP 메세지에 body가 존재
GET요청은 멱등이며, POST는 멱등이 아님.
멱등이란?
사전적 정의는 연산을 여러번 적용하더라도 결과가 달라지지 않는 성질을 의미
GET은 리소스를 조회한다는 점에서 여러번 요청하더라도 응답이 똑같을 것이다
POST는 리소스를 새로 생성하거나 업데이트할 때 사용되기 때문에 멱등이 아니라고 볼 수 있다.