클라이언트가 보낸 요청의 처리 상태를 응답에서 알려주는 기능
- 1xx (Informational) : 요청이 수신되어 처리중
- 2xx (Successful) : 요청 정상 처리
- 3xx (Redirection) : 요청을 완료하려면 추가 행동이 필요
- 4xx (Client Error) : 클라이언트 오류, 잘못된 문법 등으로 서버가 요청을 수행할 수 없음
- 5xx (Server Error) : 서버 오류, 서버가 정상 요청을 처리하지 못함
만약 모르는 상태 코드가 나타나면?
- 클라이언트가 인식할 수 없는 상태코드를 서버가 반환하면?
- 클라이언트는 상위 상태코드로 해석해서 처리
- 미래에 새로운 상태 코드가 추가되어도 클라이언트를 변경하지 않아도 됨
- (예)
-> 299 ??? -> 2xx(Successful)
-> 451 ??? -> 4xx(Client Error)
-> 599 ??? -> 5xx(Server Error)
요청이 수신되어 처리 중
-> 거의 사용하지 않으므로 생략
클라이언트의 요청을 성공적으로 처리
요청을 완료하기 위해 유저 에이전트의 추가 조치 필요
0. 3xx 코드의 종류
- 300 Multiple Choices
- 301 Moved Permanently
- 302 Found
- 303 See Other
- 304 Not Modified
- 307 Temporary Redirect
- 308 Permanent Redirect
1. 리다이렉션 이해
웹 브라우저는 3xx 응답의 결괴에 Location 헤더가 있으면, Location 위치로 자동 이동 (리다이렉트)
자동 리다이렉트 흐름
종류
-영구 리다이렉션 : 특정 리소스의 URI가 영구적으로 이동
-> ex) /members -> /users
-> ex) /event -> /new-event
-일시 리다이렉션 : 일시적인 변경
-> 주문 완료 후 주문 내역 화면으로 이동
-> PRG : POST/REDIRECT/GET
-특수 리다이렉션
-> 결과 대신 캐시를 사용
2. 영구 리다이렉션 (301, 308)
- 리소스의 URI가 영구적으로 이동
- 원래의 URL를 사용X, 검색 엔진 등에서도 변경 인지
- 301 Moved Permanently
-> 리다이렉트 시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있음(MAY)- 308 Permanent Redirect
-> 301과 기능은 같음
-> 리다이렉트 시 요청 메서드와 본문 유지(처음 POST를 보내면 리다이렉트도 POST 유지)
3. 일시적인 리다이렉션 (302, 307, 303)
리소스의 URI가 일시적으로 변경
따라서 검색 엔진 등에서 URL을 변경하면 안됨
- 302 FOUND
-> 리다이렉트 시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있음(MAY)- 307 Temporary Redirect
-> 302와 기능은 같음
-> 리다이렉트 시 요청 메서드와 본문 유지( 요청 메서드를 변경하면 안된다. MUST NOT)- 303 See Other
-> 302와 기능은 같음
-> 리다이렉트 시 요청 메서드가 GET으로 변경
4. PRG: Post/Redirect/Get
5. 무엇을 써야 하는가? (302,307,303)
- 정리
-> 302 Found : Get으로 변할 수 있음
-> 307 Temporary Redirect : 메서드가 변하면 안됨
-> 303 See Other : 메서드가 GET으로 변경- 역사
-> 처음 302 스펙의 의도는 HTTP 메서드를 유지하는 것
--> 그런데 웹 브라우저들이 대부분 GET으로 바꾸어버림(일부는 다르게 동작)
---> 그래서 모호한 302 대신 명확한 303, 307 등장- 현실
-> 307,303을 권장하나 이미 많은 애플리케이션 라이브러리들이 302를 기본값으로 사용
--> 자동 리다이렉션 시 GET으로 변해도 되면 그냥 302를 사용해도 큰 문제 없음
6. 기타 리다이렉션
1. 클라이언트 오류
2. 400 Bad Request
3. 401 Unauthorized
4. 403 Forbidden
5. 404 Not Found
1. 서버오류
2. 500 Internal Server Error
3. 503 Service Unavailable