티스토리 뷰

반응형

이슈 내용

AWS API Gateway에 Edge-optimized(이하 엣지 최적화) 설정이 되어 있을 때, 임의의 리소스를 HTTP로(HTTPS 아님!) 호출한다고 가정하자.

이 경우, 포스트맨으로는 정상적으로 호출이 되지만 curl로는 307 Temporary Redirect가 반환되는 기현상이 발생한다!

또한, AWS API Gateway 호출 내역을 봐도 아무것도 찍히지 않는다. 즉, AWS API Gateway가 응답하지 않았음에도 누군가가 중간에 307로 반환하고 있는 것! 왜 포스트맨과 curl의 동작이 다르고, 누가 중간에서 요청을 가로채어 307 응답을 반환하고 있는 것일까?

원인 분석

원인을 분석해보면 다음과 같다:

  • 엣지 최적화가 설정된 AWS API Gateway는 게이트웨이 앞단에 CloudFront가 할당된다.
  • CloudFront는 HTTP 프로토콜을 사용하는 요청에 대해 HTTPS 프로토콜 사용을 유도하도록 307로 응답한다.

이렇듯 AWS API Gateway가 처리하기 전에 CloudFront가 튕겨내기 때문에 AWS API Gateway가 호출되지 않았음에도 307 응답이 나간 것처럼 보여지게 된다.

그렇다면 curl로는 안되는데 왜 포스트맨으로는 되었을까? 찾아보니, 포스트맨은 다음과 같은 자동 리다이렉트 옵션이 기본적으로 활성화되어 있다고 한다. 때문에 307에 대해 알아서 HTTPS 프로토콜 기반 엔드포인트로 리다이렉트하여 정상적으로 호출된 것처럼 보인 것!

추가적으로, curl 역시 -L 옵션을 명시할 경우 포스트맨의 기본 설정과 같이 자동으로 리다이렉트 하게 된다.


번외. 리다이렉션 없이 HTTP만으로 호출하고 싶다면?

AWS API Gateway 설정만으로는 불가능하다.
nginx를 올린 프록시용 EC2 인스턴스를 두는 등 다른 서비스와 함께 우회하는 방식을 택할 수 밖에 없어보인다!

댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
글 보관함