728x90
3xx Redirection 이란?
요청을 완료하기 위해 유저 에이전트의 추가 조치가 필요하다
웹 브라우저는 3xx 응답의 결과에 Location 헤다가 있을 경우, Location 위치로 자동 이동한다
리다이렉션의 종류
영구 리다이렉션 - 특정 리소스의 URI가 영구적으로 이동
- 원래의 URL을 사용하지 않는 경우, 검색 엔진 등에서도 변경 인지
- /members -> /users
- /event -> /new-event
일시 리다이렉션 - 일시적인 변경
- 리소스의 URI가 일시적으로 변경
- 검색 엔진 등에서 URL을 변경하면 안 된다
- 주문 완료 후 주문 내역 화면으로 이동
- PRG : Post/Redirect/Get
특수 리다이렉션
- 결과 대신 캐시를 사용
영구 - 301 Moved Permanently
- 리다이렉트시 요청 메서드가 Get으로 변하고, 본문이 제거될 수 있음(MAY)
영구 - 308 Permanent Redirect
- 기본적으로 기능은 301과 같음
- 리다이렉트 요청 시, 요청 메서드와 본문 유지 (POST로 요청을 보내면 리다이렉트도 POST 유지)
일시 - 302 Found
- 리다이렉트시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있음(MAY, 안될 수도 있음)
일시 - 307 Temporary Redirect
- 기본적으로 기능은 302와 같음
- 리다이렉트시 요청 메서드와 본문 유지(요청 메서드를 변경하면 안 됨. MUST NOT)
일시 - 303 See Other
- 기본적으로 기능은 302와 같음
- 리다이렉트시 요청 메서드가 GET으로 반드시 변경 (302와 차이점)
처음 302 스펙의 의도는 HTTP 메서드를 유지하는 것이었으나, 대부분의 웹브라우저들이 대부분 GET으로 바꾸어버리게 되면서 302를 대신하는 명확한 307,303이 등장하게 됨 (301 대응으로 308도 등장)
307,303을 권장하지만 이미 많은 애플리케이션 라이브러리들이 302를 기본값으로 사용하고 있다
자동 리다이렉션시 GET으로 변해도 되면 그냥 302를 사용해도 큰 문제 없다
PRG : Post/Redirect/Get
POST로 주문 후에 웹 브라우저를 새로고침 하면?
- 새로고침은 다시 요청이므로 중복 주문이 될 수 있음
- PRG 이후 리다이렉트할 경우 GET으로 요청해서 새로 고침해도 GET으로 결과만 다시 조회
영구 vs 일시 리다이렉션 ??
사람이 보기에는 하는 역할이 동일하다고 볼 수 있으나,
둘의 가장 큰 차이점은 검색엔진 최적화에 있다
어떤 방법을 쓰느냐에 따라 검색엔진 최적화에 미치는 영향이 커진다
300 Multiple Choices
- 요청에 대해 둘 이상의 가능한 응답이 있음을 나타냄
- 안 쓴다
304 Not Modified
- 캐시를 목적으로 사용
- 클라이언트에게 리소스가 수정되지 않았음을 알려주며 클라이언트는 로컬 PC에 저장된 캐시를 재사용한다(캐시로 리다이렉트)
- 304 응답은 응답에 메시지 바디를 포함하면 안 됨(로컬 캐시를 사용해야 하므로)
- GET, HEAD 요청 시만 사용 가능
- 304 응답 코드를 반환받기 위해선, 클라이언트는 If-Modified-Since 헤더 혹은 If-None-Match 헤더를 포함한 조건부 요청을 전송해야 함
728x90
'개발일지 > 웹개발' 카테고리의 다른 글
Spring-boot Github Actions 환경변수 설정해주기 (0) | 2023.01.12 |
---|---|
Spring-boot Github Actions를 이용한 자동배포 (0) | 2023.01.06 |
토큰 기반 자격 증명 방식 (0) | 2022.11.23 |
세션(session)이란? (0) | 2022.11.23 |
Cookie의 옵션들 (0) | 2022.11.22 |