ALB 리스너 규칙 301, 302 사용 시 유의할 점

출처: https://docs.aws.amazon.com/ko_kr/elasticloadbalancing/latest/application/load-balancer-listeners.html

ALB의 리스너에 규칙을 추가하여, 조건에 따라 특정 페이지로 리다이렉트를 시킬 수 있습니다. 이때, 상태 코드로 301, 302를 선택할 수 있습니다. 301 Moved Permanently, 302 Found는 이름에서 알 수 있다시피 특정 URL로 영구 이동, 일시적 이동하는 상태 코드입니다.

301, 302가 가지는 특성 때문에 사용 시 유의할 점이 존재합니다.
바로, 요청 메서드를 GET으로 변환한다는 점입니다.

만약 ALB로 POST로 요청이 들어와서 301 응답을 받게 된다면 클라이언트는 GET 요청으로 해당 URL로 다시 요청을 보내게 됩니다. 그러면서 본문이 제거되게 됩니다.

만약, HTTP 요청 메서드가 변경되지 않는 것을 원한다면 307, 308 상태 코드를 사용해야 합니다. 하지만 ALB에서 이를 지원하지 않습니다.

AWS에 문의하였을 때, ALB에서 307, 308을 지원 안 하는 것은 의도한 것이 맞다는 답을 받았습니다.
RFC 문서를 확인하면 다음과 같이 언급하고 있습니다.


“GET 또는 HEAD 이외의 요청에 대한 응답으로 301 상태 코드를 수신한 경우, 사용자 에이전트는 사용자가 확인할 수 없는 한 요청을 자동으로 리디렉션 해서는 안 됩니다. 이렇게 하면 요청이 실행된 조건이 변경될 수 있기 때문입니다.”


또한 307 리디렉션은 대상 애플리케이션을 통해 이루어져야 하기 때문에 ALB에서 지원하지 않습니다.

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다