GET 방식은 이름 그대로 무언가를 가져오는 것
POST 방식은 포스트를 붙이듯이 무언가를 만들거나 수정하는 것
-
Get은 서버에서 어떤 데이터를 가져와서 보여줄때 사용
-> 어떤 값이나 내용, 상태등을 바꾸지 않는 경우에 사용
-> 글의 내용에 대한 목록을 보여주는 경우나, 글의 내용을 보는 경우
-
Post는 서버상의 데이터 값이나 상태를 바꾸기 위해서 사용
-> 글의 내용을 저장하고, 수정하는 경우
📍 GET 방식
- 클라이언트가 서버로 데이터를 요청하기 위해 사용되는 Method
- GET 요청을 할 때 Body 부분은 비어있고 헤더에 Body의 콘텐츠 타입을 명시하는 Content-Type 헤더 필드도 적지 않는다.
- URL뒤에 쿼리 스트링(Key와 Value)을 붙이고 HTTP 패킷의 헤더에 포함해서 서버에 데이터를 요청한다.
특징
- URL에 쿼리 스트링(데이터)을 붙여서 서버에 전송
- 데이터를 Header(헤더)에 포함하여 전송
- URL에 정보들이 그대로 노출되기 때문에 POST 방식보다 상대적으로 보안에 취약
- 캐싱이 가능
- POST 방식보다 상대적으로 전송 속도가 빠름
- 전송하는 데이터양에 한계가 있음 (브라우저마다 GET 요청 길이 제한 존재)
- 브라우저 히스토리에 기록이 남음
- 브라우저마다 글자 수 제한이 있기 때문에 게시판의 게시물, 목록 조회와 같은 간단한 데이터 요청할 때 적합
💡 캐싱이란 한번 접근 후 또 요청할 시 빠르게 접근하기 위해 레지스터에 데이터를 저장시켜 놓는 것
📍 POST 방식
- 클라이언트가 서버로 데이터를 전송해 리소스를 추가하거나 생성하기 위해 사용되는 Method
- POST 요청 시 HTTP 패킷의 헤더에 Body의 콘텐츠 타입을 명시하는 Content-Type 헤더 필드를 포함하고 HTTP 패킷의 Body에는 데이터를 담아서 서버로 전송한다.
특징
- 데이터들을 URL뒤에 붙여서 서버로 보내는 것이 아닌 Body에 담아서 전송
- 요청 헤더의 Content-Type에 콘텐츠 타입을 명시
- 데이터들이 URL에 노출되지 않기 때문에 GET 방식보다 상대적으로 보안적
- 데이터들을 Body에 담기 때문에 서버로 보내는 데이터의 양은 제한 없음
- URL에 데이터가 노출되지 않으므로 캐싱 불가
- 클라이언트에서 인코딩, 서버에서 디코딩
- 요청받는 시간제한 존재
- 브라우저 히스토리에 기록이 남지 않음
- 보통 서버의 값이나 상태를 변경하기 위해 사용되므로 글쓰기, 글 수정과 같은 작업에 적합하다.
👁🗨 비교표
HTTP Method | GET 방식 | POST 방식 |
---|
URL 예시 | http://localhost:3000/login?id=admin&pw=1234 | http://localhost:3000/login |
데이터가 담기는 곳 | HTTP 패킷 Header | HTTP 패킷 Body |
리소스 전달 방식 | 쿼리스트링 | HTTP Body |
HTTP 응답 코드 | 200 | 201 |
URL에 데이터 노출 여부 | O | X |
캐싱 가능 여부 | O | X |
브라우저 기록 | O | X |
북마크 추가 | O | X |
데이터 길이 제한 | O | X |
멱등성(idempotent) | O | X |
💡 멱등성은 연산을 여러 번 하더라도 결과가 달라지지 않는 성질을 의미하며, get 요청의 경우 여러 번 요청해도 응답이 같지만 post 요청의 경우엔 리소스를 새로 생성하거나 업데이트하므로 서버에게 동일한 요청을 여러 번 전송해도 응답은 항상 다를 수 있다.
📍 POST vs PUT
- POST는 INSERT, PUT은 UPDATE
- POST는 멱등하지 않고 PUT은 멱등하다.
- POST는 새로운 데이터를 계속 생성하기 때문에 요청시마다 데이터를 생성하지만, PUT은 사용자가 데이터를 지정하고 수정하는 것이기 때문에 같은 요청을 계속하더라도 데이터가 계속 생성되지 않는다.
📍 PUT vs PATCH
- PUT은 해당 자원의 전체를 교체, PATCH는 일부를 변경
- PUT은 멱등하지만, PATCH는 멱등하지 않다.
- PUT은 전체 자원을 업데이트 하기 때문에 동일 자원에 대해서 동일하게 PUT을 처리하는 경우 멱등하게 처리되는 반면 PATCH로 처리되는 경우 자원의 일부가 변경되기 때문에 멱등성을 보장할 수 없다.