상태코드?
클라이언트가 보낸 요청 처리 상태를 응답에서 알려주는 기능
1xx(Informational) | 요청이 수신되어 처리중 |
2xx(Successful) | 요청 정상 처리 |
3xx(Redirection) | 요청을 완료하려면 추가 행동 필요 |
4xx(Client Error) | 클라이언트 오류(문법 오류 등) |
5xx(Server Error) | 서버 오류 |
새로운 상태 코드가 추가되어도 상위 상태 코드로 해석하여 처리
거의 사용하지 않음
요청을 완료하기 위해 유저 에이전트 (클라이언트 프로그램, 주로 웹 브라우저) 의 추가 조치 필요
🔎 리다이렉트?
웹 브라우저는 3xx 응답의 결과에 Location 헤더가 있으면, Location 위치로 자동 이동자동 리다이렉트 흐름
ex.
/event
👉/new-event
경로 변경시1. 요청 GET /event HTTP/1.1 Host: localhost:8080
2. 응답 HTTP/1.1 301 Moved Permanently Location: /new-event
3. 클라이언트가 자동으로 경로를 변경 후 요청 GET /new-event HTTP/1.1 Host: localHost:8080
4. 응답 HTTP/1.1 200 OK ...
리다이렉션 종류
- 영구 리다이렉션 : 특정 리소스의 URI가 영구적으로 이동
- ex) /members -> /users
ex) /event -> /new-event- 일시 리다이렉션 : 일시적인 변경
- 주문 완료 후 주문 내역 화면으로 이동
- PRG : POST/Redirect/Get
- 특수 리다이렉션 : 결과 대신 캐시를 사용
301, 308
차이점
1. POST 요청
2. 301, Location 응답
3. GET 변경 , 메시지 바디 제거 후 요청
1. POST 요청
2. 301, Location 응답
3. POST , 메시지 바디 유지하여 요청
302, 303, 307
차이점
302 Found
307 Temporary Redirect
303 See Other
일시적 리다이렉션 예시
PRG 패턴 사용 전
1. 주문 요청
POST /order
2. 응답
HTTP/1.1 200 OK
3. 결과 화면에서 새로고침
4. 재요청
POST /order
5. 응답 (중복 주문)
HTTP/1.1 200 OK
PRG 패턴 사용 후
1. 주문 요청
POST /order
2. 응답
HTTP/1.1 302 Found
Location: /order-result/19
3. 자동 리다이렉트 -> 요청
GET /order-result/19
4. 주문 결과 응답
HTTP/1.1 200 OK
6. 새로고침 -> 결과 화면만 다시 요청 (5번으로 이동)
처음 301, 302의 의도는 HTTP 메서드를 유지하는 것이었으나 웹 브라우저들이 대부분 GET으로 바꾸어버림 👉 모호한 301, 302를 대신하여 303, 307, 308이 등장
but, 이미 많은 애플리케이션 라이브러리들이 301, 302를 기본값으로 사용중이다
자동 리다이렉션시 GET으로 변해도 되면 301, 302를 사용해도 문제 없음
300, 304
300 Multiple Choices : 쓰지 않음
304 Not Modified
잘못된 문법 등으로 서버가 요청 수행 불가
오류의 원인이 클라이언트
이미 잘못된 요청이므로 똑같은 재시도가 실패
400 Bad Request
401 Unauthorized
403 Forbidden
404 Not Found
500 Internal Server Error
503 Service Unavailable
5xx 에러는 진짜 서버 내부적으로 문제가 있을 때 내야 함