상태코드
상태코드는 HTTP 응답 메세지 request-line에 들어가는 데이터로 전체적인 범위는
1xx(Informational) : 요청 처리 중
2xx(Successful) : 요청 정상 처리
3xx(Redirection) : 요청을 완료하려면 추가 행동이 필요
4xx(Client Error) : 클라이언트 오류, 잘못된 문법등으로 서버가 요청을 수행할 수 없음
5xx(Server Error) : 서버 오류, 서버가 정상 요청을 처리하지 못함
이다. 만약 클라이언트가 인식할 수 없는 상태코드가 온다면 상위 상태코드로 해석을 한다. 예시로 287이 온다면 상위 상태코드인 200으로 정상 처리로 처리를 한다. 100 ~ 상태 코드를 제외한 나머지 상태 코드에 대해 자세히 정리를 해보았다.
2xx
- 200 OK
요청을 성공하였을 때 반환되는 상태코드이다.
- 201 Created
요청을 성공하여 새로운 리소스가 생성되었을 때 반환되는 상태코드이다. 생성된 리소스는 Location 헤더 필드로 식별이 가능하다.
- 202 Accepted
요청은 접수 되었으나 처리가 완료되지 않았을 때 반환되는 상태코드이다. 주로 배치 처리에 사용이 된다.
- 204 No Content
요청은 성공하였으나 응답 페이로드 본문에 보낼 데이터가 없을 때 반환되는 상태코드이다.
3xx
3xx 응답의 결과에 Location 헤더가 존재하면, Location 위치로 자동 이동한다 이를 리다이렉션이라 부르는데 리다이렉션에는 3가지 종류가 있다.
영구 리다이렉션 -
- 특정 리소스의 URI가 영구적으로 이동한다 따라서 원래의 URL을 사용하지 않는다. 검색 엔진 등 에서도 변경을 감지한다.
- 301 Moved Permanently
리다이렉트 시 요청 메서드가 GET으로 변하고, 본문이 제거될 수도 있다.
- 308 Permanent Redirect
리다이렉트 시 요청 메서드와 본문이 유지된다.
일시 리다이렉션 - 일시적인 변경
- 리소스의 URI가 일시적으로 변경한다. 따라서 검색 엔진 등에서 URL을 변경하면 안된다.
- 302 Found
리다이렉트 시 요청 메서드가 GET으로 변하고, 본문이 제거될 수도 있다.
- 303 See Other
리다이렉트 시 요청 메서드가 GET으로 변한다.
- 307 Temporary Redirect
리다이렉트 시 요청 메서드와 본문이 유지된다.
특수 리다이렉션 - 결과 대신 캐시를 사용
- 304 Not Modified
캐시를 목적으로 사용되며, 클라이언트에게 리소스가 수정되지 않았음을 알려준다. 클라이언트는 이 상태코드를 받으면 저장된 캐시를 재사용한다. 304 응답은 응답에 메시지 바디를 포함하지 않는다.
PRG: Post/Redirect/Get
POST 요청으로 리소스가 변경이 일어났을 때 새로고침을 하는 경우 POST 요청이 재 전송될 수 있으며 이는 문제를 일으킬 수 도 있다. 이를 방지하기 위해서 POST 요청 시 리다이렉트 상태 코드를 넘겨 클라이언트에서 GET 요청을 하게끔 설계할 수 있다. 이렇게 된다면 새로고침을 하더라도 GET 요청이 재 전송이 되므로 해결할 수 있다.
4xx
- 400 Bad Request
클라이언트가 잘못된 요청을 했을 때 서버가 요청을 처리할 수 없어 반환하는 상태코드이다.
- 401 Unauthorized
클라이언트의 인증이 되지 않았을 때 반환하는 상태코드이다. 401 오류 발생시 응답에 WWW-Authenticate 헤더와 함께 인증 방법을 설명한다.
- 403 Forbidden
클라이언트의 인가가 되지 않았을 때 반환하는 상태코드이다. 주로 인증은 되었으나 권한이 부족한 경우에 발생한다.
- 404 Not Found
요청 리소스를 찾을 수 없을 때 반환하는 상태코드이다. 또는 클라이언트에게 권한이 부족한 리소스에 접근할 때 권한 자체를 숨기고 싶을 때 사용한다.
5xx
- 500 Internal Server Error
서버 내부 문제로 오류가 발생했을 때 반환하는 상태코드이다.
- 503 Service Unavailable
서버가 일시적인 과부화 또는 업데이트 작업 중 일 때 동안 반환하는 상태코드이다. 이 문제는 주로 일시적이며 Retry-After 헤더 필드를 통해 복구 예정시간을 알릴 수 있다.
참고 문서 및 링크