3xx(Redirection):
요청을 완료하기 위해 유저 에이전트의 추가 조치 필요
- 300 Multiple Chocies
- 301 Moved Permanently
- 302 Found
- 303 See Other
- 304 Not Modified
- 307 Temporary Redirect
- 308 Permanent Redirect
한 마디로, 클라이언트가 서버에 요청을 했을 때, 서버가 요청을 완료하려면 뭔가 추가적인 작업이 필요하다라고해서 클라이언트가 다시 보내는겁니다. 위에서 말하는 유저 에이전트는 클라이언트 프로그램이자 주로 웹 브라우저를 말합니다. 그리고 300번대 시리즈는 Multiple Choices라고 있는데 그것은 거의 사용하지 않습니다. 301 ~ 308까지가 중요합니다.
리다이랙션 이해
- 웹 브라우저는 3xx 응답의 결과에 Location 헤더가 있으면, Location 위치로 자동 이동(리다이렉트)
예제를 보면, 예를 들어서 이벤트 페이지가 있습니다. 경로가 /event인데요. 옛날에 event 페이지를 뿌렸습니다. 이벤트 페이지인 /event 페이지는 더이상 쓰지 않고 새로운 /new-event페이를 경로로 사용합니다. 자 그러면 어떻게 해야하느냐, 기존 사용자들은 북마크를 할 수도 있고 기존 링크가 여러분에게 공유가 될 수도 있습니다. 그러면 그런 사용자들은 이렇게 합니다. /event라고 웹브라우저에서 치고 들어옵니다. 그러면 어떻게 되느냐 요청을 할 때 GET으로 /event가 들어옵니다. 서버 입장에서는 /event를 더 이상 사용 안하는데 /event를 요청했네 그래서 저 경로를 /new-event로 바꿨다고 알려줍니다. 이렇게 알려주면 됩니다. 위에 보면 응답 부분에서 301코드를 쓰고 있고 그 옆에 Moved Permanently로 영원히 이동을 알려줬다고 알려줍니다. 그리고 Location 위치를 /new-event라고 줍니다. 그러면 최종적으로 어떻게 되느냐 클라이언트 웹 브라우저가 어떻게 하냐면 웹 브라우저 스스로 경로를 /new-event로 바꿔줍니다. 그리고 웹 브라우저가 그 바꿔진 경로로 다시 요청합니다. 그러면서 서버는 응답을 해주겠죠.
리다이랙션 이해(종류)
- 영구 리다이랙션 - 특정 리소스의 URI가 영구적으로 이동
- 예) /members -> /users
- 예) /event -> /new-event
- 일시 리다이렉션 - 일시적인 변경
- 주문 완료 후 주문 내역 화면으로 이동
- PRG: Post/Redirect/Get
-특수 리다이렉션
-결과 대신 캐시를 사용
영구 리다이렉션은 영구적으로 리소스의 URI를 바꿔주는 일시 리다이렉션은 뭐냐면 일시적으로 잠깐 이동할 때 쓰입니다. 예를 들어서 제일 많이 쓰는게 주문을 완료하고 나서 주문 내역 화면으로 일시적으로 이동합니다. 이럴 때 많이 씁니다. 이거에 관한 예제가 매우 자주 쓰는 PRG 패턴이 있습니다.
영구 리다이렉션(301, 308)
- 리소스의 URI가 영구적으로 이동
- 원래의 URI를 사용X, 검색 엔진 등에서도 변경 인지
- 301 Moved Permanently
- 리다이렉트시 요청 메소드가 GET으로 변하고, 본문이 제거될 수 있음(MAY)
- 308 Permanent Redirect
- 301과 기능은 같음
- 리다이렉트시 요청 메소드와 본문 유지(처음 POST를 보내면 리다이렉트도 POST 유지)
301과 308은 기능은 같다. 근데 요부분에 차이점이 있습니다. 301은 리다이렉트시 POST로 요청했을 때, 그게 POST에서 GET으로 변하고, 본문이 제거가 될 수 있습니다. 그런데 308은 301과 기능이 같지만 리다이렉트를 요청했을 때 처음 만약에 POST로 보내고 어떤 데이터가 내부에 있어요. 그거를 리다이렉트를 요청할 때도 똑같이 POST로 보내고 내부에 보낸 데이터를 유지합니다.
'HTTP 웹 지식' 카테고리의 다른 글
HTTP 상태 코드5(클라이언트 오류) (0) | 2022.01.11 |
---|---|
HTTP 상태 코드4(3xx - 리다이렉션2) (0) | 2022.01.11 |
HTTP 상태 코드2(2xx - 성공) (0) | 2022.01.11 |
HTTP 상태 코드1(HTTP 상태 코드 소개) (0) | 2022.01.11 |
HTTP 메서드 활용1(클라이언트에서 서버로 데이터 전송1) (0) | 2022.01.09 |