Home
home
🏡 홈
home

HTTP 리다이렉트에는 어떤 방식이 있을까 ?

분류
개발지식
태그
Web
작성자
작성일
2023/10/17 07:59
안녕하세요. 맥스입니다. 백앤드에서 강제 리다이렉션 처리하는 작업이 있었는데, 리퍼러가 유지되는지 의문이 되어 리다이렉트 방식에 대해 알아보았습니다. HTTP 리다이렉트 종류에 대해 알아보고, 각 상태코드별 차이점을 간단하게 요약해보았습니다.

리다이렉션 이해

웹 브라우저는 3xx 응답의 결과에 Location 헤더가 있으면, Location 위치로 자동 이동한다.

영구 리다이렉션

301 Mover Permanently
리다이렉트시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있다.
308 Permanent Redirect
301과 기능은 같다
리다이렉트시 요청 메서드와 본문 유지(처음에 POST를 보내면 리다이렉트도 POST 유지)

일시 리다이렉션

302 Found
리다이렉트시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있다.
307 Temporary Redirect
302와 기능은 같다.
리다이렉트시 요청 메서드와 본문 유지(요청 메서드를 변경하면 안 된다.)
303 See Other
302와 기능은 같다.
리다이렉트시 요청 메서드가 무조건 GET으로 변경된다.

특수 리다이렉션

304 Not Modified
캐시를 목적으로 사용
클라이언트에게 리소스가 수정되지 않았음을 알려준다.
따라서 클라이언트는 로컬 PC에 저장된 캐시를 재사용한다.
304 응답은 응답에 메시지 바디를 포함하면 안 된다.
조건부 GET, HEAD 요청 시 사용한다.

무엇을 써야 할까?

302 Found -> GET으로 변할 수 있다.
307 Temporary Redirect -> 메서드가 변하면 안 된다.
303 See Other -> 메서드가 GET으로 변경
처음 302 스펙의 의도는 HTTP 메서드를 유지하는 것이었다.
웹 브라우저들이 대부분 GET으로 바꾸어버림
모호한 302를 대신하는 명확한 307과 303 등장
307, 303을 권장하지만 이미 302를 많이 기본값으로 사용
자동 리다이렉션시 GET으로 변해도 되면 그냥 302를 사용해도 문제가 없다.