HTTP (하이퍼텍스트 전송 프로토콜)에 대해 이야기할 때, GET 방법이 일반적으로 요청 본문을 사용하지 않는 이유를 궁금해 할 수 있습니다. 결국, 웹 요청 세계에서는 서버에 정보를 전달하기 위해 요청 본문에 데이터를 보내는 것이 일반적입니다. 그러나 GET 방법은 가장 기본적인 HTTP 방법 중 하나임에도 불구하고 작동 방식이 약간 다릅니다.
이 가이드에서는 HTTP GET 요청이 일반적으로 요청 본문을 포함하지 않는 이유를 설명하고, GET 방법의 목적을 탐구하며, GET 요청을 보내는 방법에 대해 논의할 것입니다.
HTTP에서 요청 본문이란 무엇인가요?
HTTP에서 요청 본문은 클라이언트에서 서버로 데이터를 전달하는 요청 메시지의 일부입니다. POST, PUT 및 PATCH와 같은 방법에 필수적이며, 자원을 생성, 업데이트 또는 수정하는 데 사용됩니다. 예를 들어, 사용자 계정을 생성하기 위한 POST 요청에서는 사용자 세부 정보가 요청 본문에 포함됩니다. 반대로, GET 또는 DELETE와 같은 방법은 요청 본문을 사용하지 않는 경우가 많으며, 자원 검색이나 삭제를 위해 URL 및 헤더 에 집중합니다.
GET 요청은 HTTP에서 본문을 가질 수 있나요?
네, 기술적으로는 HTTP GET 요청에 요청 본문을 포함시키는 것이 가능합니다. HTTP/1.1 사양에 따르면, 모든 HTTP 요청 메시지는 메시지 본문을 포함할 수 있으며, 서버는 이를 염두에 두고 메시지를 파싱해야 합니다. 그러나 GET 방법의 서버 의미론은 본문이 포함된 요청에 대해 의미가 없도록 제한되어 있다는 것을 이해하는 것이 중요합니다.
간단히 말해서, GET 요청에 요청 본문을 포함시키는 것이 명시적으로 금지되어 있지는 않지만, 그렇게 하는 것은 결코 유용하지 않습니다. GET 방법의 목적은 Request-URI로 식별된 정보를 검색하는 것이며, 본문을 추가하여 요청을 변경하는 것은 복잡성을 초래하고 표준 HTTP 관행과 일치하지 않습니다.
HTTP/1.1 사양
HTTP/1.1 사양(RFC 7230)은 GET 요청에서 본문을 포함하는 것을 허용하지만, 일반적으로 권장되지 않습니다. 기술적으로 가능하지만, GET 요청에 본문을 붙이는 것은 서버 자원을 수정하지 않고 안전하게 데이터를 검색하기 위해 GET을 사용하는 원칙에 반합니다.
왜 HTTP GET 요청은 본문을 사용하지 않나요?
GET 방법이 HTTP 본문을 사용하지 않는 이유는 무엇일까요? 다음으로 GET 방법이 요청 본문을 사용하지 않는 주요 이유를 소개하겠습니다.
HTTP 사양의 제한 사항
- HTTP 사양은 GET 방법 요청이 다시 전송할 수 있어야 한다고 명시합니다.
- 요청 본문이 있으면 재전송 시 원치 않는 부작용이 발생할 수 있습니다.
보장된 멱등성
- GET 방법은 "동일한 GET 요청을 반복해도 결과가 변경되지 않을 것"을 보장해야 합니다.
- 요청 본문은 멱등성을 깨뜨릴 수 있습니다.
캐시 구현
- GET 결과는 종종 캐시되고 재사용됩니다.
- 요청 본문이 있으면 캐싱이 작동하지 않습니다.
북마크 및 공유의 용이성
- GET 요청의 URL만 사용하여 결과를 재현할 수 있는 것이 바람직합니다.
- 요청 본문이 있으면 URL만으로 재현하기 어려워집니다.
보안
- GET 요청은 로그 등에 기록될 수 있습니다.
- 요청 본문에 개인 정보가 포함되면 보안 위험이 됩니다.
위의 이유로 인해 GET 방법은 기본적으로 요청 본문을 사용하지 않습니다.
예외: GET 방법에서도 HTTP 본문을 사용하는 경우
그러나 이것은 항상 GET 방법과 함께 HTTP 본문을 사용할 수 없다는 의미는 아닙니다. 다음 경우에 요청 본문도 GET 방법을 사용하여 전송될 수 있습니다.
HTTP GET 방법은 전통적으로 요청 본문을 사용하는 것과 연관되지 않지만, 예외가 있습니다. 예를 들어, 검색 키워드와 같은 검색 기준을 지정할 때 이를 요청 본문에 포함시키고 GET 방법을 통해 전송할 수 있습니다.
REST API와 같이 쿼리 매개변수의 수가 제한된 경우에는 요청 본문이 데이터 전송을 위한 대안이 될 수 있습니다. 또한, 요청 스머글링은 트래픽 분석을 방해하기 위해 잘못된 요청 본문을 전송하는 것을 포함할 수 있습니다. 실제로 GET 방법은 일반적으로 요청 본문을 제외하지만, 이 규칙에서 벗어날 수 있는 특정 사례가 있습니다. HTTP 본문을 통한 데이터 전송과 관련된 대부분의 시나리오에서는 POST 및 PUT와 같은 방법이 일반적으로 사용됩니다.
Apidog: 모든 HTTP 요청(GET, POST, PUT, DELETE)에 완벽 호환
그렇다면 GET이나 POST와 같은 방법을 사용하여 HTTP 본문에 데이터를 전송하고 싶으면 어떻게 해야 할까요? Apidog 라는 뛰어난 API 관리 도구는 모든 HTTP 방법을 완벽하게 지원하므로, HTTP 요청을 보낼 때 HTTP 방법 중 하나를 지정하고 HTTP 본문을 사용할지 여부를 선택할 수 있습니다.
또한, 자신만의 API를 개발하면 API를 설계하는 것뿐만 아니라 API 사양 생성, 테스트 자동화, 데이터 모킹 등의 다양한 기능을 수행할 수 있습니다.

Apidog은 GET 및 POST를 포함한 다양한 HTTP 방법을 지원합니다. 웹 API는 모두 HTTP 프로토콜을 사용하기 때문에, 목적에 따라 HTTP 방법을 선택해야 합니다. HTTP 방법에 대해 이야기하자면 항상 다음과 같습니다:
- GET (내용 가져오기)
- POST (새 내용 추가하기)
- PUT (기존 내용 변경하기)
- DELETE (내용 삭제하기)

원하는 방법을 HTTP 방법 드롭다운 목록에서 선택할 수 있으며, HTTP 본문을 사용하려는 경우 요청 매개변수의 "Body" 탭으로 쉽게 전환할 수 있습니다.

"보내기" 버튼을 클릭하면 빠르게 GET 응답을 받을 수 있습니다.
