[TIL]GET 메서드에는 RequestBody를 사용할 수 없다.

J쭈디·2025년 3월 4일
0

GET 요청에서 RequestBody를 사용하면 안 되는 이유

얼마 전, 검색 기능 구현을 하다가 GET 메서드에 RequsetBody를 사용하게 되었었는데, 그렇게 하면 안된다는 피드백을 들었다.

왜 그런걸까? 하며 리팩토링 진행하면서 가볍게 안되는 이유를 정리해보기로 했다.

1. GET 요청의 역할

  • HTTP GET 요청은 서버에서 리소스를 조회하기 위한 요청이다.
  • 서버로 데이터를 보내는 용도가 아니다.
  • URL에 Query Parameters를 포함하는 것은 괜찮으나, Body 메시지를 포함하는 건 권장되지 않는다.

2. GET 요청의 특징과 RequestBody가 안 되는 이유

GET 요청의 특징

  • 캐싱이 가능하다.
  • 브라우저에 기록이 남는다.
  • 북마크가 가능하다.

RequestBody는 길이제한도 없고, 본문이기 때문에 위의 특징들과 합쳐지면 위험한 합주가 시작될 것이다.

GET 요청에서 RequestBody를 사용하면 안 되는 이유

  1. 캐싱 문제
    일단 캐싱이 가능하다면 값이 임시저장된다는 의미와 동일한데, 사용자가 입력한 정보가 임시저장 된다는 건 보안상 매우 안 좋은 사례가 될 듯 하다.

  2. 브라우저 히스토리 및 보안 문제
    그리고 기록이 남은 것도 마찬가지다. 검색 한 번 하려 한건데 내가 뭐라고 검색했는지까지 브라우저에 남아버린다는 얘기이기 때문이다.

  3. 북마크 가능성
    GET의 북마크에는 URL만이 저장된다. 이로하여금 검색 내용을 알 수 있게 해야하는데, 본문이 있다면 북마크에 저장된 URL로는 내용을 알 수 없어서 GET의 특성과 맞지 않게 된다.

profile
언제 어느 위치에 있더라도 그 자리의 최선을 다 하는 사람이 되고 싶습니다.

0개의 댓글