해당 글은 인프런의 김영한님의 강의인 '모든 개발자를 위한 HTTP 웹 기본 지식'을 공부하며 작성한 글입니다.
거의 사용 안함
2XX (Successful)
- 200 OK
- 201 Created
- 202 Accepted
- 요청이 접수는 되었지만 처리되지 않음 (배치 처리 등)
- 204 No Content
- 성공이지만 보낼 데이터가 없음 (여기 velog에서 임시저장 같은)
3XX (Redirection)
리다이렉션의 종류
영구 리다이렉션
- 특정 리소스의 URI가 영구적으로 이동
- 301 Moved Permanently
요청 메서드가 GET으로 변하고 본문이 제거될 수 있음
- 308 Permanent Redirect
리다이렉트 시 요청 메서드와 본문 유지 (POST로 보내면 POST로 리다이렉트)
일시 리다이렉션
- 일시적으로 변경 (주문 완료 후 주문 내역 이동으로 리다이렉트 등)
- 302 Found
- 요청 메서드가 GET으로 변하고 본문이 제거될 수 있음 (MAY)
- 307 Temporary Redirect
- 리다이렉트 시 요청 메서드와 본문을 유지해야 함 (MUST NOT)
- 303 See Other
- 302와 기능은 같으나 리다이렉트 시 요청 메서드가 GET으로 변경
PRG : Post/Redirect/Get
POST 요청 후에 웹 브라우저를 새로고침하면 POST 요청을 다시 요청한다
즉 멱등하지 않기 때문에 이슈가 생길 수 있다.
그러므로 PRG를 사용해야 한다.
그래서 어떤 리다이렉션을 써야하나요?
자동 리다이렉션 시에 GET으로 변해도 되면 302를 사용해도 큰 문제 없다
또한 현실적으로 많은 어플리케이션 라이브러리들이 302를 기본값으로 사용중
특수 리다이렉션 : 결과 대신 캐시를 사용
- 300 Multiple Choices
- 304 Not Modified
- 캐시를 목적으로 사용
- 클라이언트 에게 리소스가 수정되지 않았음을 알려주어 클라이언트는 저장된 캐시를 사용하여 리다이렉트한다.
- 캐시를 사용할 것이기 때문에 메세지 바디를 포함하지 않아야 한다.
- 조건부로 GET, HEAD 요청 시 사용한다.
4XX (Client Error)
오류의 원인이 클라이언트에게 있다.
400 Bad Request
서버 개발자들은 철처한 Validation으로 걸러서 잘못된 요청 시 400번대로 내려줘야 한다.
401 Unauthorized
- 클라이언트가 해당 리소스에 대한 인증(로그인)이 필요함.
- 사실상 인증(Authentication)임
403 Forbidden
- 서버가 요청을 이해했지만 승인을 거부함
- 인증은 되었지만 접근 권한이 불충분한 경우
404 Not Found
- 요청 리소스가 서버에 없음
- 또는 권한이 부족한 리소스에 접근할 때 해당 리소스를 숨기고 싶을 때
5XX (Server Error)
서버의 문제로 오류 발생
서버에 문제가 있기 때문에 400번대 오류와는 달리 재시도하면 성공할 수 있다.
500 Internal Server Error
503 Service Unavailable
- 서비스 이용 불가
- 서버가 일시적인 과부하 또는 예정된 작업으로 잠시 요청을 처리할 수 없는 경우
- Retry-After 헤더 필드로 얼마뒤에 복구되는지 보낼 수 있음