[HTTP] GET 메서드 호출 시 Request Body를 사용 할 수 있을까?

hhh·2024년 1월 18일
post-thumbnail

GET 메서드 호출 시 Request Body를 사용 할 수 있을까?

HTTP 프로토콜과 GET Method

HTTP 프로토콜은 웹과 서버간의 데이터를 교환하는 데 사용되는 기본적인 프로토콜 중 하나이다. HTTP 프로토콜에서는 다양한 메서드를 제공하는데 그 중 GET 메서드는 서버로부터 검색 및 조회를 위한 목적으로 주로 활용된다. 그러나 이 때 일반적으로 HTTP에서 GET 메서드를 호출시에는 Request Body를 사용할 수 없다.

GET 메소드에서 Request Body를 사용하지 않는 이유를 아래에서 살펴보자

GET 메소드의 설계 의도

1. 멱등성과 안전성

GET 메서드의 특징으로 멱등성(idempotent)안전성(safe)이 있다.

멱등성은 같은 요청을 여러 번 수행하더라도 동일한 결과를 반환하는 특성을 나타낸다.
안전성은 해당 요청이 서버의 상태를 변경하지 않는다는 것을 의미한다.

GET 요청시 Request Body에 데이터를 포함하면 해당 데이터가 응답에 영향을 미치게 될 수 있어 멱등성을 유지하기 어려울 수 있다. 또 GET 메서드는 데이터를 조회하는 목적으로 설계되었기 때문에, Request Body를 사용하여 데이터를 전송하는 것은 GET 메서드의 설계 의도에 어긋난다고 할 수 있다.

2. 캐싱

GET 메서드의 또다른 특성 중 하나는 캐싱이다. GET 메서드 요청시 응답 결과가 캐싱되는데 이 과정에서 리소스를 반복해서 요청할 때 서버에서 응답을 다시 생성하는 비용을 줄일 수 있다.
Request Body를 사용하는 경우, 동일한 URI에 대해 여러 가지 다른 Request Body가 존재할 수 있는데, 이는 서버가 응답을 캐시할 때 어떤 Request Body에 기반하여 캐시해야 하는지를 결정하기 어렵게 하기 때문에 캐싱 구현을 더 복잡하게 만들 수 있다.

웹 아키텍처의 원칙 존중

HTTP GET METHOD 표준 살펴보기
HTTP/1.1의 명세에 따르면 GET 메서드는 Request Body를 포함해서는 호출하면 안 된다. 이는 GET 메서드가 설계 의도에 따라 단순한 데이터 조회를 목적으로 하고 있으며, 이에 따라 Request Body를 사용하지 않도록 규정되어 있다.

보안이슈

GET 요청은 URL에 파라미터가 노출되므로, 민감한 정보를 Request Body에 포함하면 보안 이슈가 발생할 수 있다. Request Body를 사용해야 하는 경우 POST 등의 메서드를 활용하여 민감한 정보를 숨기는 것이 보안상 더 안전하다고 할 수 있다.

결론

GET 메서드 호출 시 Request Body 사용은 기존의 특성을 해치며, 보안 이슈와 웹 아키텍처의 원칙을 위배할 수 있다. GET 메서드는 설계 의도상 Request Body를 사용하지 않도록 고안되었다. 이로써 멱등성과 안전성을 유지하면서 클라이언트와 서버 간의 효과적인 통신이 가능하다.

profile
개발 기록 끄적끄적✏️

3개의 댓글

comment-user-thumbnail
2024년 11월 4일

이거보고 2시간 고생한거 고쳤읍니다..감사합니다..

답글 달기
comment-user-thumbnail
2024년 12월 26일

현재 표준은 메서드와 body는 무관하다고 되어있습니다. 잘못된 정보.

1개의 답글