DEV-HJ 2023. 9. 3. 17:02
반응형

리다이렉션

클라이언트가 서버에 요청 후 서버가 요청을 완료하려면 뭔가 추가적인 작업이 필요하다고 클라이언트한테 다시 요청 보내는것

 


3XX (Redirection) 

요청을 완료하기 위해 유저 에이전트의 추가 조치 필요 

 

300 - Multiple Choices

301 - Moved Permanently

302 - Found

303 - See Other

304 - Not Modified

307 - Temporary Redirect

308 - Permanent Redirect

 

300은 잘 안쓰고 301부터 308까지가 중요하다


리다이렉션 이해

 

웹 브라우저는 3XX 응답의 결과에 Location 헤더가 있으면 Location 위치로 자동이동 (리다이렉트)

 

클라이언트가 /event 경로로 입력 시 더이상 /event 경로를 쓰지 않고

/new-event 경로를 사용해서 응답 Location에 새로운 URI를 보내준다.

 

클라이언트는 자동으로 리다이렉트해서 /new-event 경로로 접속한다


리다이렉션 이해

종류

 

1. 영구 리다이렉션 - 특정 리소스의 URI가 영구적으로 이동

예) /members → /users

예) /event → /new-event

 

2. 일시 리다이렉션 - 일시적인 변경

- 주문완료후 주문 내역 화면으로 이동

- PRG 패턴 : Post/Redirect/Get (굉장히 자주씀)

 

3. 특수 리다이렉션

- 결과 대신 캐시를 사용


영구 리다이렉션

301, 308

 

  • 리소스의 URI가 영구적으로 이동
  • 원래의 URL을 사용못함, 검색 엔진 등에서도 변경 인지

 

  • 301 Moved Permanently
  • - 리다이렉트시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있음 (MAY)

 

  • 308 Permanent Redirect
  • - 301과 기능은 같음
  • - 리다이렉트시 요청 메서드와 본문 유지 (처음 POST를 보내면 리다이렉트도 POST 유지)

클라이언트가 /event URI에 POST로 요청을 보냈을시 서버에서는 /event 경로가 /new-event로 바뀌었다고

301로 응답해주면 클라이언트는 /new-event URI로 HTTP 메서드를 GET으로 바꿔서 리다이렉트한다.

 

이벤트 페이지에 요청했던 데이터는 다 사라지고 새로운 이벤트 페이지로 이동된 상황.

301에는 리다이렉션된 페이지에서 다시 사용자가 데이터를 입력해서 POST 요청을 보내야한다.

 

그런 단점을 해결해주려고 나온게 308 

301이랑 똑같은데 POST로 똑같이 유지시켜줘서 메시지 본문도 유지시켜준다.

그럼 리다이렉션 되면서 이벤트 참여(POST요청)도 자연스럽게 완료.

 

하지만 이런 스펙이 있다는거지 실무에서는 거의 사용하지 않는다.

/event에서 /new-event로 바뀌면 내부적으로 전달되야 하는 데이터가 다 바뀌어버린다.

그렇기 때문에 사실 POST로 가도 GET으로 돌리는게 맞다.

 

반응형