3XX 리다이렉션
요청 완료하기 위해 클라이언트 프로그램(웹브라우저)의 추가 조치가 필요할 때 보내는 상태코드이다.
리다이렉션이란?
웹 브라우저는 3xx 응답의 결과에 Location 헤더가 있으면 Location 위치로 자동 이동한다.
요청을 하고 /event라는 엔드포인트로 요청했는데, 이 엔드포인트가 아니라 /new-event라는 엔드포인트로 바뀌었을 경우 Moved Permanently 301 코드를 반환해야한다.
이 경우 웹브라우저가 /new-event라는 새로운 엔드포인트로 자동 리다이렉트해준다.
클라이언트 입장에서는 이 과정이 매우 빠르므로 인식하지 못한다.
리다이렉션 종류
영구 리다이렉션
- 301,308
- 리소스의 URI가 영구적으로 이동한다.
- 원래의 URL을 사용하지 않고, 검색 엔진 등에서도 변경을 인지할 수 있다.
- 301,308 둘다 경로가 완전히 바뀌었다는 것을 알려준다.
- 301은 Moved Permanently로 리다이렉트시 요청 메서드가 GET으로 변하고 본문이 제거될 수 있다. 브라우저에서 구현이 이런식으로 되어 있다. POST로 보냈지만 body가 사라지고 GET으로 요청이 전송될 수 있다는 것이다.
일시적 리다이렉션
- 302,307,303
- 리소스 URI가 일시적으로 변경된다.
- 검색 엔진 등에서 URL을 변경하면 안된다.
- 302 Found: 리다이렉트 요청 메서드가 GET으로 변경되고, 본문이 제거될 수 있다.
- 307 Temporary Redirect: 302와 기능은 같은데 리다이렉트 시 요청 메서드와 본문을 유지해야 한다.POST로 보내면 POST를 유지해야하고, 변경하면 안된다.
- 303 See Other: 302와 기능은 같은데 리다이렉트 요청 메서드가 GET으로 변경된다.
- 실무에서는 아직 302 많이 사용, 307이 권장된다.
PRG
- Post로 주문 시 웹 브라우저 새로고침 시, 새로고침은 재요청이 되므로 중복 주문이 될 수 있다.
- PRG 적용 시, POST로 요청 시 새로고침으로 인한 중복 요청 방지하기 위해, 결과 화면만 GET으로 리다이렉트