3XX 상태코드 - Redirection
- 서버의 3xx 응답의 결과에
Location 헤더가 있다면, 웹 브라우저가 Location 위치로 자동으로 이동하는 것을 의미한다.
📍 Location 헤더
- "re-direct" 할 url을 명시한다.
- 3XX(redirection) 이나 201(created) 상태 코드가 응답되었을 때만 적용할 수 있다.
- 3XX 상태코드가 반환되었을 때, 기존 url에
Location에 명시된 url을 붙여 완성된 새로운 URL에 request를 보낸다.(fetch 요청)
영구 리다이렉션
- 특정 리소스의 URI가 영구적으로 이동하는 것을 말한다.
- 원래 URL을 사용하지 않는다. → 검색 엔진 등에서도 변경을 인지해야 함
🎮 301 Moved Permanently
re-direct fetch 요청을 보낸다. (영구적으로 머문다.)
- 리다이렉트 시, 요청 메서드가
GET으로 무조건 변경된다.
GET 메서드나 HEAD 메서드에 대한 응답으로만 사용된다.
- 본문(body)이 제거될 가능성이 있다.

출처: 김영한님 자료
🎮 308 Permanent Redirect
- 기존의
original 메서드를 변경하지 않고, 동일한 메서드로
re-direct fetch 요청을 보낸다.
re-direct된 요청이 만들어질 때 기존 메서드와 payload는 변경되지 않는다.
➡️ 처음에 POST를 보냈으면, 리다이렉트 후에도 POST와 본문 내용 유지됨
- 그 외엔 301과 기능은 같다.

출처: 김영한님 자료
일시적 리다이렉션
- 리소스의 URI가 일시적으로 변경된다.
- URI가 일시적으로 변경되기 때문에 검색 엔진 등에서 URL을 변경하면 안 된다.
- 주문 후 결과 페이지로 이동과 같은 경우에 사용한다.
🎮 302 Found
re-direct fetch 요청을 보낸다. (일시적으로 방문한다)
- 리다이렉트 시, 요청 메서드가
GET으로 변경된다.
GET 메서드나 HEAD 메서드에 대한 응답으로만 사용된다.
- 본문(body)이 제거될 수 있음
🎮 307 Temporary Redirect
- 기존의 original 메서드를 변경하지 않고, 동일한 메서드로 re-direct fetch 요청을 보낸다. (일시적으로 방문한다)
re-direct 된 요청이 만들어질 때 기존 메서드와 payload는 변경되지 않는다.
🎮 303 See Other
- 언제나
GET 메서드를 사용해 re-direct fetch 요청을 보낸다. (기존의 original 메서드 무시)
PUT 이나 POST 메서드가 요청된 이후에 변경된 상황을 "읽고싶을 때" 주로 사용한다.
🎮 304 Not Modified
- 캐시를 목적으로 사용한다.
- 클라이언트에게 리소스가 수정되지 않았음을 알려준다.
→ 클라이언트가 로컬 PC의 캐시를 재사용
→ 네트워크의 부담을 줄일 수 있다.
- 로컬 캐시를 사용하기 때문에 응답에
message body가 포함되지 않는다.
💻 리다이렉트(Redirect)
- web container는 redirect 명령이 들어오면 웹 브라우저에게 다른 페이지로 이동하라는 명령을 내린다.
- 웹 브라우저는 URL을 지시된 주소로 바꾸고, 그 주소로 이동한다.
- 다른 web container에 있는 주소로 이동이 가능하다.
- 새로운 페이지에서는 request, response 객체가 새롭게 생성된다.
🖥️ 포워드(Forward)
- web container 차원에서 페이지 이동, 실제로 웹 브라우저는 다른 페이지로 이동했는지 알 수 없다.
- 웹 브라우저에는 최초 호출한 URL만 표시되고, 이동한 페이지의 URL 정보는 볼 수 없다.
- 동일한 web container에 있는 페이지로만 이동이 가능하다.
- 현재 실행 중인 페이지와 forward에 의해 호출된 페이지는 동일한 request, response객체를 공유한다.
출처
[HTTP] HTTP 상태 코드 - 3xx Redirection
Redirect VS, Forward (Redirect와 forward의 차이
직접 서버를 만들면서 배운 Location Header