포스트

302 / 303 / 307 리다이렉션 상태 코드 정리

302 / 303 / 307 리다이렉션 상태 코드 정리


❐ 1. 리다이렉션 상태 코드 (302 / 303 / 307)


3-1. 302 상태 코드와 HTTP/1.0의 관행

POST 요청에 대한 리다이렉션 처리 방식

  • HTTP/1.0 클라이언트는 302 응답을 받으면
    Location 헤더의 URL로 GET 요청을 다시 보냄
  • 원래 요청 메서드가 POST여도 GET으로 변경됨
  • 이는 명세가 아닌 관행적으로 굳어진 동작
  • 서버 역시 이 동작을 기대하고 302를 사용해 왔음


3-2. HTTP/1.1에서 302가 문제가 된 이유

리다이렉션 의미의 불명확성

  • HTTP/1.1에서는 302의 의미가 명확하지 않음
  • POST → GET 전환 여부가 명세로 정의되지 않음
  • 클라이언트 구현에 따라:
    • 메서드를 변경하기도 하고
    • 그대로 유지하기도 함
  • 결과적으로 리다이렉션 처리에 혼란 발생


3-3. 303 상태 코드 도입 (의도적인 POST → GET)

“결과는 다른 URL에서 GET으로 가져와라”

  • HTTP/1.1에서 도입된 상태 코드
  • 현재 요청의 결과를 다른 URL에 대해 GET 요청으로 조회하라는 의미
  • 주 용도:
    • POST 처리 후 결과 페이지 이동
  • 특징:
    • 의도적으로 메서드 변경 (POST → GET)


3-4. 307 상태 코드 (메서드 유지 리다이렉트)

302의 모호함을 해결하기 위한 임시 리다이렉트

  • HTTP/1.1 명세에서 권장되는 상태 코드
  • 의미:
    • 같은 요청을 그대로 다른 URL로 재전송
  • 특징:
    • 메서드 변경 없음
    • POST → POST, GET → GET 유지
  • 목적:
    • 302의 의미적 혼란 제거
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.