[nginx]dev, 개발 서버 GET,POST

Simple·2022년 2월 1일
0

트러블슈팅

목록 보기
5/13

포스트맨을 통해 개발 서버에 API테스트를 진행하고 있었다.

[POST]dev.example.com/users로 api테스트를 하니 결과는???

405 Method not allowed,,,, 왜지??

로컬에서 진행해보니 매우 잘되었다.

레퍼런스도 막 뒤져보고

error_page 405 =200 $uri;

처럼 서버 설정에도 이렇게 추가해줬지만, 소용없었다.

그런데,,,

다른 api를 테스트하다가 분명 POST요청을 했는데 GET으로 통신이되서 또 다른 api의 결과값이 나오는 것을 보고, 실마리가 이곳에 있을 것같다는 생각을 했다.

알고보니,,,,
dev.example.com을 301로 http://$host$request_uri로 리디렉션 리턴하게 설정해주었는데 301은 GET요청만 인식한다,,,,,

참고


307 Temporary Redirect vs 308 Permanent Redirect

307은 302와 유사하고, 308은 301과 유사하다.
다만 차이점이 있다면 전송 받은 HTTP Method를 유지한다는 것이다.
301과 302는 redirect 시킬 때 method를 get으로 바꿔서 전송한다.
따라서 get 요청을 보낼 때는 문제가 없지만 post 메소드를 요청했을 때 문제가 발생할 수 있다.
http to https redirect를 구현할 때 301 또는 302 상태 코드를 쓰게 되면
http 프로토콜을 통해 post 메소드로 날아온 게 https 프토토콜을 통해 get 메소드로 변경되면서 컨트롤러나 라우터에 매핑되는 URI가 없어서 오류가 나게 된다.
따라서 301 대신에 308을, 302 대신에 307을 쓰면 좀 더 안전하게 redirect 시킬 수 있다.
또한 이제 301과 302를 redirect라는 명칭으로 부를 수도 없다.
301은 Moved Permanently로, 302는 Found로 명칭이 변경되었다.

결론

해결책 2가지 방법

  1. 도메인 앞에 https://를 붙여주고 api 테스트를 한다.

  2. 리디렉션 301 -> 308로 변경해줘서 http 메소드를 보장해준다.

profile
몰입하는 개발자

0개의 댓글