HTTP 웹 지식

HTTP 상태 코드3(3xx - Redirection)

귀요미찰쓰 2022. 1. 11. 15:50
728x90
반응형

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로 보내고 내부에 보낸 데이터를 유지합니다.

 

반응형

 

 

 

반응형