HTTP Method 중 클라이언트가 서버로 요청을 보내는 방식은 크게 두 가지로 GET 방식과 POST 방식이 있습니다.
이번 포스팅에서는 GET 방식과 POST 방식의 특징과 차이점을 알아보려 합니다.
* HTTP: 웹상에서 클라이언트와 서버 간에 데이터를 주고받을 수 있는 프로토콜
조회를 위해 서버에 데이터를 요청할 때 사용하는 방식입니다.
GET 요청의 경우 Body는 비어있고 쿼리스트링을 이은 URL을 HTTP 패킷 헤더를 통해 서버에 전송합니다.
http://localhost:3000/login?id=admin&pw=1234
쿼리스트링이란 URL의 ‘?’ 뒤에 이름과 값으로 쌍을 이루는 요청 파라미터를 뜻하는데 쿼리스트링을 통한 요청 시 이러한 이름과 값들이 노출되기 때문에 보안에 큰 결함이 생기게 됩니다.
또한 GET 방식의 경우 전송하는 데이터 양에 제한이 있어 간단한 요청을 할 때 적합합니다.
GET 방식은 캐싱이 가능해 속도가 빠릅니다. 변경될 일이 적은 정적컨텐츠 등에 캐싱을 사용하여 불필요한 요청을 방지할 수 있기 때문입니다.
GET 방식 특징
- URL에 쿼리스트링을 붙여서 서버에 전송한다.
- 데이터를 Header에 포함하여 전송한다.
- URL에 정보들이 그대로 노출되기 때문에 보안에 취약하다.
- 캐싱이 가능하다.
- POST 방식보다 상대적으로 전송 속도가 빠르다.
- 전송하는 데이터의 양에 한계가 있다.
- 브라우저 히스토리에 기록이 남는다.
데이터를 서버로 전송하여 리소스를 추가 또는 수정하기 위해 사용하는 방식입니다.
POST 요청 시 HTTP 패킷 헤더에 Body의 콘텐츠 타입을 명시하는 헤더 필드를 포함하고 HTTP 패킷 Body에는 데이터를 담아서 서버로 전송합니다.
http://localhost:3000/login
Body는 길이 제한이 없기 때문에 대용량 데이터를 전송할 수 있습니다.
또한 당장 겉으로 데이터가 노출되지 않기 때문에 GET 방식보다는 보안성이 높은건 사실이지만, 이 또한 툴 등으로 내용 확인이 가능하기 때문에 민감한 데이터의 경우 암호화가 필요합니다.
POST 방식 특징
- 데이터들을 URL뒤에 붙여서 서버로 보내는 것이 아닌 Body에 담아서 전송한다.
- 요청 헤더의 Content-Type에 콘텐츠 타입을 명시한다.
- 데이터들이 URL에 노출되지 않기 때문에 GET 방식보다 보안적이다.
- 데이터들을 Body에 담기 때문에 서버로 보내는 데이터의 양에 제한이 없다.
- URL에 데이터가 노출되지 않으므로 캐싱이 불가하다.
- 클라이언트에서 인코딩, 서버에서 디코딩
- 요청받는 시간 제한이 존재한다.
- 브라우저 히스토리에 기록이 남지 않는다.
GET 방식은 서버의 리소스에서 데이터를 요청할 때 사용하고, POST 방식은 서버의 리소스를 새로 생성하거나 업데이트할 때 사용한다.
GET 방식은 URL 파라미터에 요청하는 데이터를 담아 보내기 때문에 HTTP 메시지에 body가 없다. POST 방식은 body 에 데이터를 담아 보낸다. 따라서 HTTP 메시지에 body가 존재한다.
GET 요청의 경우 여러 번 요청해도 응답이 같기 때문에 멱등이며, POST 요청은 리소스를 새로 생성하거나 업데이트하므로 서버에게 동일한 요청을 여러 번 전송해도 응답이다를 수 있기 때문에 멱등이 아니다.
* 멱등성이란 연산을 여러 번 하더라도 결과가 달라지지 않는 성질을 의미한다.