본문 바로가기

GET 방식과 POST 방식의 특징과 차이점

액트 2023. 1. 10.

클라이언트와 서버와의 구동 방식

클라이언트가 인터넷 브라우저 주소창에 URL을 입력합니다.

서버는 클라이언트의 요청에 응답을 하여 웹페이지를 보여주게 됩니다.

이때 클라이언트가 서버로 보내는 데이터를 HTTP 패킷이라 하며 HTTP 패킷은 크게 Header(헤더)와 Body(바디)로 나눠집니다.

헤더에는 HTTP Method 방식(POST, GET), 클라이언트와 브라우저, 접속하고자 하는 URL 정보 등등이 담겨있습니다.

바디는 보통 비어있으며 정보를 담아서 서버에 요청할 수 있습니다.

 

1. GET 방식

GET 방식은 클라이언트가 서버로 데이터를 요청하기 위해 사용되는 Method입니다.

GET 방식을 통한 요청은 URL 주소 끝에 파라미터로 포함되어 전송됩니다.

예를 들어 아래와 같은 방식입니다.

https://www.naver.com/show?name1=value1&name2=value2

서버는 name1과 name2라는 파라미터 명으로 각각 value1과 value2의 파라미터 값을 전달 받아 처리합니다.

위와 같이 URL뒤에 파라미터로 전송되는 부분을 쿼리 스트링(query string) 이라고 부릅니다.

즉 GET 방식은 쿼리 스트링(Key와 Value)을 붙이고 HTTP 패킷의 헤더에 포함해서 서버에 데이터를 요청합니다. 

 

GET 방식 특징

  • 캐시 가능
  • 브라우저 히스토리에 기록이 남음
  • 북마크 될 수 있음
  • URL에 쿼리 스트링(데이터)을 붙여서 서버에 전송
  • 데이터를 Header(헤더)에 포함하여 전송
  • URL에 정보들이 그대로 노출되기 때문에 POST 방식보다 상대적으로 보안에 취약
  • POST 방식보다 상대적으로 전송 속도가 빠름
  • 전송하는 데이터양에 한계가 있음 (브라우저마다 GET 요청 길이 제한 존재)

 

2. POST 방식

POST방식은 클라이언트가 서버로 데이터를 전송해 리소스를 추가하거나 생성하기 위해 사용되는 Method입니다.

GET 방식은 클라이언트가 서버로 데이터를 요청하기 위해 사용되는 Method입니다.

POST 방식은 GET 방식과 다르게 데이터들이 URL에 표시되지 않고 HTTP 패킷 Body 태그에 담겨 서버로 데이터가 전송됩니다.

GET에서 URL 의 파라미터로 보냈던 name1=value1&name2=value2 가 Body 태그에 담겨 보내지는 것입니다.

따라서 보내는 데이터의 양에 제한이 없고 대용량 데이터를 전송할 때는 POST 방식이 적합합니다.

URL에 데이터가 표시가 되지 않기 때문에 GET 방식보다는 상대적으로 보안에 강합니다. 하지만 웹브라우저에서 제공하는 개발 도구 등을 통해 확인은 가능합니다.

POST 방식의 경우 보통 서버의 값이나 상태를 변경하기 위해 사용되므로 글쓰기, 글 수정과 같은 작업에 적합합니다.

 

POST 방식 특징

  • URL에 데이터가 노출되지 않으므로 캐시되지 않음
  • 브라우저 히스토리에 남지 않음
  • 북마크 되지 않음
  • 데이터들이 URL에 노출되지 않기 때문에 GET 방식보다 상대적으로 보안적
  • 데이터들을 Body에 담기 때문에 서버로 보내는 데이터의 양은 제한 없음
  • 클라이언트에서 인코딩, 서버에서 디코딩
  • 요청받는 시간제한 존재

 

GET과 POST 방식의 차이점

HTTP Method GET 방식 POST 방식
사용목적 데이터를 요청할 때 서버의 리소스를 새로 생성하거나 업데이트할 때 
URL 예시 http://naver.com/show?name1=value1&name2=value2 http://naver.com/show
데이터가 담기는 곳 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 요청의 경우엔 리소스를 새로 생성하거나 업데이트하므로 서버에게 동일한 요청을 여러 번 전송해도 응답은 항상 다를 수 있습니다.

 

댓글