[NginX] 리다이렉션 시 POST가 GET으로 바뀌는 문제점

smlee·2022년 6월 12일
0

에러 일지

목록 보기
7/24

문제

로컬에서 스프링부트로 개발을 진행하고 테스트가 완료된 파일들을 한 번에 올리는 방식으로 개발을 진행하였다.

로컬에서 테스트를 돌려보고 원하는 응답 결과를 받았다.

원하는 결과를 받았으므로 이 파일들을 서버에 올린 후 내 도메인으로 다시 테스트를 진행해보았다.

그랬더니 POST로 보낸 요청이 GET으로 변하는 걸 알 수 있었다.

문제 이유

/etc/nginx/sites-available/default 파일 내부에서 HTTPS 리다이렉션 설정 부분은 다음과 같았다.

301번 status code를 통해 리다이렉션을 보내도록 하고 있었다.
그런데 301번 status code는 GET만을 인식하는 문제점이 있다.

308 Permanent Redirect vs 301 Moved Permanetly

301번 Moved Permanetly는 redirect시킬 때 method를 GET으로 바꾸어서 전송한다.
반면, 308번 Permanent Redirect는 전송 받은 HTTP Method를 유지한다.
따라서 301번을 사용한다면 HTTP 프로토콜을 통해POST로 날아왔던 요청이 HTTPS 프로토콜을 통해 GET 메소드로 변경되면서 컨트롤러나 라우터에 매핑되는 URI가 없으면 오류가 나게된다.
따라서 301 대신 308을 사용하면 더 안전하게 redirect시킬 수 있다.

해결 방법

  1. 리다이렉션 코드를 301번에서 308번으로 변경한다.
  2. 요청을 날릴 때 https://를 빠뜨리지 않고 붙여준다.

0개의 댓글