Network

[HTTP] HTTP 상태 코드 - 3xx Redirection

HEY__ 2022. 7. 20. 20:41
728x90

이 글은 공부를 하면서 알게 된 내용들을 기록하는 글 입니다. 오류나 고쳐야 할 사항들이 있다면 지적 부탁드립니다!

 

⛅️ 3xx - Redirection

Redirection 리다이렉션이란?

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

김영한님 자료 : 자동 리다이렉트 흐름

 


⛅️ 영구 리다이렉션 - 301, 308

영구 리다이렉션이란?

특정 리소스의 URI가 영구적으로 이동하는 것을 말한다. ex) /event → /new-event

 원래 URL을 사용하지 않음  검색 엔진 등에서도 변경을 인지해야 함

 

 301 Moved Permanently

 리다이렉트 시, 요청 메서드가 GET으로 무조건 변경.

본문(body)이 제거될 가능성이 있음.

김영한님 자료 : 301 Moved Permanently - 요청메서드 GET으로 변경, 본문 제거

POST를 통해 메세지 바디에 등록할 정보 전달  서버에서 301와 함께 Location 헤더에 새로 이동해야 할 URL 제공

 301은 리다이렉트 시, 요청 메서드가 GET로 변경 & 메세지 바디 제거   ...

 

 

 308 Permanent Redirect

● 리다이렉트 시, 요청 메서드 & 본문이 유지된다.

   (처음에 POST를 보냈으면, 리다이렉트 후에도 POST 유지 & 본문 내용 유지)

● 그 외엔 301과 기능은 같음.

김영한님 자료 : 308 Permanent Redirect - 요청 메서드&본문 유지

POST를 통해 메세지 바디에 등록할 정보 전달  서버에서 308과 함께 Location 헤더에 새로 이동해야 할 URL 제공

 308은 리다이렉트 시, 요청 메서드와 메세지 바디 유지 →  ...

 


⛅️ 일시적 리다이렉션 - 302, 307, 303

 일시적 리다이렉션이란?

● 리소스의 URI가 일시적으로 변경되는 것.

● 일시적으로 변경되는 것이기 때문에 검색 엔진 등에서 URL을 변경하면 안됨.

● 주문 후 결과 페이지로 이동과 같은 경우에 사용한다.

 

302 Found

● 리다이렉트 시, 요청 메서드가 GET으로 변경된다.

● 본문(body)이 제거될 수 있음

 

 307 Temporary Redirect

● 리다이렉트 시, 요청 메서드 & 본문이 반드시 유지된다.

   (처음에 POST를 보냈으면, 리다이렉트 후에도 POST 유지 & 본문 내용 유지)

● 그 외엔 302와 기능이 같다.

 

 303 See Other

● 리다이렉트 시, 요청 메서드가 GET으로 변경된다.

● 그 외엔 302와 기능이 같다.

 

 302, 307, 303 정리

   307, 303을 권장하지만, 현실적으로 이미 많은 어플리케이션 라이브러리들이 302를 기본값으로 사용

   자동 리다이렉션 시, 요청 메서드가 GET으로 변해도 되면 302를 사용해도 큰 지장은 없음.

  

 PRG : Post/Redirect/Get

예시 상황 : POST로 주문 후, 새로고침하는 경우 중복 주문이 되지 않도록 막아야 한다.

  해결 방법 : POST로 주문 후, 주문 결과 화면으로 리다이렉트할 때 요청 메서드가 GET 변경되도록 하기.

김영한님 자료 : PRG를 통한 중복 주문 방지

ⓐ 클라이언트가 POST를 통해 주문을 요청

ⓑ 서버가 302 Found/303 See Other + Location을 응답 메세지에 담아서 전달

ⓒ 이 후, 자동 리다이렉트

ⓓ 요청 메서드가 GET으로 변경 → 주문 완료 페이지 요청

ⓔ 클라이언트가 새로고침을 하더라도, GET 결과 화면을 다시 요청하는 것이기 때문에 중복 주문을 방지할 수 있다.

 


⛅️ 304 Not Modified

  • 캐시를 목적으로 사용
  • 클라이언트에게 리소스가 수정되지 않았음을 알려줌 → 클라이언트가 로컬 PC의 캐시를 재사용
    → 네트워크의 부담을 줄일 수 있다.
  • 로컬 캐시를 사용하기 때문에 응답에 message body가 포함되지 않는다.

 

 

 

 

728x90