탐구개발
상태코드 301, 302, 303, 307, 308의 차이점 본문
HTTP 상태코드 300번대는 리다이렉션(redirect)과 관련된 상태 코드입니다. 이들 상태 코드는 클라이언트가 요청한 리소스가 다른 위치에 있을 때 사용되며, 클라이언트를 새로운 URL로 리다이렉트 하거나 다른 리소스로 이동시키는 데 사용됩니다. 그 중 301, 302, 303, 307, 308는 설명을 봐도 비슷한 내용이어서 잘 이해되지 않았습니다. 그래서 이 301, 302, 303, 307, 308의 차이점을 정리해 보았습니다.
리다이렉션 상태코드 비교
위치
변경 |
캐시
여부
|
메서드
변경
|
||
301
|
Moved Permanently
|
영구적
|
O
|
O
|
302
|
Found
|
일시적
|
지시
|
O
|
303
|
See Other
|
영구적
|
X
|
허가
|
307
|
Temporary Redirect
|
일시적
|
지시
|
|
308
|
Moved Permanently
|
영구적
|
O
|
위치변경
- 영구적 : 새 도메인을 얻어 서버의 콘텐츠를 이동한 경우나 HTTP로 운영되던 페이지를 HTTPS로 전환한 경우
- 일시적 : 점검 기간에만 요청을 관리 화면으로 리디렉트할 경우
캐시여부
- 클라이언트, 프록시, 검색 엔진에서 사용하는 캐시 업데이트 여부
- 검색 엔진은 이 응답을 받으면 기존 페이지의 평가를 새로운 페이지로 계승함
- 영구적으로 위치가 변경된 경우는 반드시 캐시가 변경되지만 일시적으로 변경된 경우는 기본적으로 캐시되지 않고 따로 캐시지시.
- 303만 영구적이지만 캐시하지 않음
메서드변경
- 첫번째 요청이 POST이고, 두번째 이후(리다이렉션)로 GET이나 HEAD를 사용할 경우에 사용자에게 확인필요 없이 실시할 수 있는지
- 30X 응답 시 Location 헤더에 리다이렉트 주소를 넣어 응답하고 클라이언트는 응답을 받아 Location 헤더를 보고 리다이렉트 시 대부분 GET으로 재요청.
- 301, 302, 303일 경우 허가없이 GET 요청 가능하고 307, 308일 경우 허가가 필요
역사적 배경
HTTP/1.0에서 HTTP/1.1사이에 리다이렉트 사양이 변경되면서 (POST 메서드 요청 후 GET 메서드로 변경 시 허가필요) 307, 308이 등장한 것으로 이해했습니다. 303은 302와 비슷하게 허가가 필요없이 GET으로 동작하지만 1.0와의 혼란을 막고자 등장했습니다
상태코드(HTTP버전) | 용도 |
301 (HTTP/1.0) | 도메인 전송, 웹사이트 이전, HTTPS |
302 (HTTP/1.0) | 일시적 관리, 모바일 기반 전송 |
303 (HTTP/1.1) | 로그인 후 페이지 전환 |
307 (HTTP/1.1) | RFC 7231에서 추가 |
308 (HTTP/1.1) | RFC 7538에서 추가 |
참고
HTTP 완벽 가이드, p73 (3.4.3 300-399 : 리다이렉션 상태코드)
리얼월드 HTTP, p53
'HTTP' 카테고리의 다른 글
Content-Security-Policy 헤더값 (1) | 2023.11.08 |
---|---|
CORS (교차 출처 리소스 공유) (0) | 2023.11.08 |
HTTPS(TLS) 통신 과정 (1) | 2023.11.08 |
Referer 헤더값 (0) | 2023.11.08 |
Cache-Control 헤더값 (0) | 2023.11.08 |