[HTTP] 왜 GET은 body를 안쓸까?

seheo·2023년 2월 24일
2

WEB

목록 보기
3/3
post-custom-banner

REST API로 서버를 만드는 도중에 문뜩 왜 GET에는 body를 쓰지말라고 하는지에 대해 궁금해져 찾아보았다.

GET은 body를 쓰면 안될까?

HTTP GET 요청은 서버에서 리소스를 검색하기 위해 설계되었다.

  • GET Method라도 body로 전송을 받을 수 없는 것은 아니다
  • 서버로 데이터를 보내기 위해 사용되지 않는다.
  • HTTP GET 요청은 URL에 query parameters를 포함할 수 있지만, message body를 포함하는것을 권장하지 않는다.

GET Method 특징

  1. GET 요청을 캐시할 수 있습니다.
  2. GET 요청은 브라우저 기록에 남아 있습니다.
  3. GET 요청을 북마크할 수 있습니다.
  4. GET 요청은 민감한 데이터를 처리할 때 사용해서는 안 됩니다.
  5. GET 요청에는 길이 제한이 있습니다.
  6. GET 요청은 데이터를 요청하는 데만 사용됩니다(수정 아님).

web3 school - HTTP Request Methods

HTTP 명세서에서 GET 요청에서 메시지 바디를 사용하지 않도록 권장하는 이유

  • 캐시 가능성: HTTP GET 요청은 종종 웹 브라우저에 의해 캐시된다. GET 요청을 간단하고 예측 가능하게 유지함으로써, 이러한 시스템이 캐시를 보다 쉽게 관리하고 검색할 수 있다.

  • 안전성: GET 요청은 "안전(safe)" 및 "멱등(idempotent)"이어야 합니다. 이것은 서버에서 어떠한 데이터도 수정하지 않고 부작용이 없어야 함을 의미합니다. GET 요청에서 메시지 바디를 허용하지 않음으로써, GET 요청이 안전하고 멱등하게 유지되도록 보장합니다.

  • 보안성: GET 요청은 종종 서버 로그, 브라우저 히스토리 및 다른 시스템에서 기록됩니다. 데이터를 URL에 유지함으로써, 이를 쉽게 볼 수 있으며, 제3자에게 잠재적으로 가로챌 수 있습니다. 반면, 메시지 바디에 데이터를 포함하는 POST 요청은 덜 가시적이며, 추가적인 보안 계층을 제공할 수 있습니다.

요약

HTTP 명세서에서 GET 요청에서 메시지 바디를 사용하지 않는 것은 캐시 및 보안 문제를 일으킬 수 있기 때문이다.
권장하지 않을 뿐이지 너무 복잡한 조회 요청이 필요하다면 body를 사용 할 수도 있을 것 같다

post-custom-banner

0개의 댓글