본문 바로가기
HTTP

모든 개발자를 위한 HTTP 웹 기본 지식_섹션6_3xx_Redirection(1)

by 킴도TV 2022. 2. 14.

3xx (Redirection)

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

서버가 오? 요청을 완료하려면, 클라이언트야~ 뭔가 추가적인 작업이 필요해 ^^ 라는 상태코드를 말한다.

300대 상태코드들

  • 300 Mutilple Choices (300은 거의 쓰지 않는다)
  • 301 Moved Permanently
  • 302 Found
  • 303 See Other
  • 304 Not Modified
  • 307 Temporary Redirect
  • 308 Permanent Redirect

리다이렉션 이해

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

=> 301 Moved Permanently. 경로가 영원히 이동했으므로 해당 Location으로 자동 이동한다.

  • 난 앱 개발자라 따라서 301을 받아본 적은 없다(혹은 아직 그런 경험이 없다). 따라서 나는 웹 프론트개발자가 해당 Location으로 다시 get 요청을 보내는 코드를 직접 적어야 하는지가 궁금한데 직접 요청하는가?

리다이렉션에는 크게 3가지가 있다. (1) 영구 리다이렉션 (2) 일시 리다이렉션 (3) 특수 리다이렉션

  • 영구 리다이렉션 - 특정 리소스의 URI가 영구적으로 이동
    • ex) /members -> /users
    • ex) /event -> /new-event
  • 일시 리다이렉션 - 일시적인 변경
    • 대표적으로 주문 완료 후에 주문 내역 화면으로 이동하는 경우에 일시 리다이렉션을 사용한다.
    • PRG: POST/Redirect/Get
  • 특수 리다이렉션
    • 결과 대신 캐시를 이용

영구 리다이렉션

301, 308

  • 301, 308은 영구 리다이렉션을 나타내는 상태 코드들로 기능(혹은 신호)이 똑같다. 다만 아래와 같은 내부적 차이가 있다.

301 Moved Permanently

  • 리다이렉트시 클라이언트의 요청 메서드가 GET으로 변하고, 보내려던 본문이 제거될 수 있음(MAY) -> 브라우저들이 거의 다 이렇게 구현되어있다!
    • MAY의 범주는 (1)GET으로 변할 수 있고, (2) 본문이 제거될 수 있다는 것 둘 다 이다.

  • 301은 언제 쓰일까?
    • 입력 폼이 따로 필요없는, POST로 보낼 필요없는 GET요청일 때 Status Code로 301을 사용한다. 즉 조회용 요청일때는 리다이렉트로 301이 어울리지만 입력하고 등록 및 수정하는 POST, PUT 과 같은 요청인 경우에는 리다이렉트로 301을 보내면 사용자가 다시 처음부터 입력을 해야하는 불편함을 야기한다.

308 Permanent Redirect

리다이렉트시 클라이언트의 요청 메소드와 본문 유지(처음 POST를 보내면 리다이렉트도 POST 유지). -> 브라우저들이 거의 다 이렇게 구현되어있다!

  • 308은 언제 쓰일까?
    • 그렇다. 308로 301의 단점을 해결할 수 있다. 입력하고 등록 및 수정하는 POST, PUT과 같은 요청일때 리다이렉트로 308을 사용하자! 사용자는 자신이 적어놓았던 정보를 잃지 않고, 원래의 요청을 성공적으로 등록시킬 수 있다.

=> 하지만 현실적으로 event에서 new-event로 업데이트되면 이벤트 기획상 클라이언트가 보내야 하는 데이터가 new-event는 event와 완전히 다르다는 것이 99%이다. 따라서 301을 많이 사용하고 308은 사용하지 않는다고 한다.

=> 그리고 사실은 영구적 리다이렉트 보다도 일시적 리다이렉트를 많이 사용한다고 한다.

다음 시간엔 일시적 리다이렉트에 대해 알아보자

강의듣고 느낀점:
(1) 이런 장점들 때문에라도 웹뷰를 쓸 수가 있겠다.
(2) 이상도 있지만 항상 현실이란 것이 존재하고, 둘 간의 조율이 필요하다.