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) 이상도 있지만 항상 현실이란 것이 존재하고, 둘 간의 조율이 필요하다.
'HTTP' 카테고리의 다른 글
모든 개발자를 위한 HTTP 웹 기본 지식_섹션6_4xx_5xx_에러코드 (0) | 2022.02.15 |
---|---|
모든 개발자를 위한 HTTP 웹 기본 지식_섹션6_3xx_Redirection(2) (0) | 2022.02.14 |
모든 개발자를 위한 HTTP 웹 기본 지식_섹션5_HTTP메소드_응용 (0) | 2022.02.08 |
모든 개발자를 위한 HTTP 웹 기본 지식_섹션4_HTTP_메서드 (0) | 2022.02.06 |
HTTP_지속_커넥션 (0) | 2022.01.25 |