개발 일지/CS

REST API 의 GET 요청에는 Request Body를 넣을 수 있을까?

미숫가루설탕많이 2023. 6. 22. 20:14

REST API의 GET 요청은 서버로부터 리소스를 조회하거나 검색하기 위해 사용되며, 보통은 요청 매개변수(query parameters)를 사용해서 필요한 데이터를 전달하거나 URL 경로의 특정 부분에 /{id}와 같이 변수를 넣어서 사용한다.

 

그렇다면 과연 GET 요청에 Request Body를 포함해서 요청을 보낼 수 있을까?

 

결론부터 얘기하면 HTTP 표준은 GET요청에 Request Body(요청 본문)를 포함할 수 있도록 허용한다. 하지만 GET 요청은 서버로부터 정보를 요청하고 응답을 받는 것에 중점을 두기 때문에, 요청 본문에 데이터를 담는 것은 권장되지 않는 방법이라고 한다.

 

GET 요청에 Request Body를 넣는 것이 권장되지 않는 이유는 다음과 같다.

  1. 캐싱 : GET 요청은 캐시를 활용하여 응답을 저장하고 재사용할 수 있다. 하지만 GET 요청은 동일한 URL에 대해 동일한 응답이 예상되므로, 요청 본문을 포함하면 캐시의 효율성이 떨어지게 된다.

  2. 북마크 및 공유 가능성 : GET 요청은 URL을 북마크하거나 다른 사람과 공유하기 용이해야 한다. 하지만 요청 본문을 포함하면 URL 자체에 데이터가 포함되므로, 북마크 또는 공유 시 데이터 노출 및 데이터 무결성 문제가 발생할 수 있다.

  3. 보안 : GET 요청은 주로 데이터를 조회하는 용도로 사용되며, 요청 본문에 데이터를 담으면 데이터가 URL에 노출되어 보안에 취약해질 수 있다. URL은 대부분 로그 파일이나 브라우저 히스토리에 기록되기 때문에 민감한 데이터를 GET 요청의 요청 본문에 넣는 것은 안전하지 않다.

  4. 프록시 서버 및 게이트웨이 호환성 : 일부 프록시 서버 및 게이트웨이는 GET 요청의 요청 본문을 지원하지 않을 수 있다. 따라서 클라이언트가 GET 요청에 요청 본문을 포함한 경우에도 중간 서버를 통과하는 과정에서 요청 본문이 사라지거나 처리되지 않을 수 있다.

 

따라서 위와 같은 이유로, GET 요청은 주로 쿼리 매개변수나 경로 매개변수를 사용하여 필요한 데이터를 전달하는 방식을 사용하는 것이 일반적이다. 만약 데이터를 서버로 전송해야 한다면 POST, PUT, PATCH 등의 다른 HTTP 메서드를 사용하는 것이 더 적합한 것 같다.

'개발 일지 > CS' 카테고리의 다른 글

[Cloud] VPC  (0) 2023.04.08
[Cloud] Load Balancer  (0) 2023.04.06
[Cloud] Proxy Server  (0) 2023.04.05
[Cloud] Docker  (0) 2023.04.03
[Cloud] Cloud Storage(S3)  (0) 2023.04.02