HTTP 상태코드 (응답코드) : 클라이언트의 요청 (Request)에 대한 응답(Response)에 대한 상태를 코드로 알려주는 것
상태코드는 1부터 5까지로 구성되어 있다.
| Response Code Syntax |
Response Code | 설명 |
| 1XX | Informational | 서버가 요청을 받아 처리중인 상태 (어떤 형태의 문제도 X) |
| 2XX | Success | 요청한 작업이 성공적으로 처리됨 |
| 3XX | Redirection | 요청을 처리하기 위해 추가 동작이 필요함 (Redirection: 요청된 위치에서 리소스를 더 이상 사용할 수 없음을 알림) |
| 4XX | Client Error | 클라이언트의 요청에 오류가 있는 상태 |
| 5XX | Server Error | 서버가 오류가 발생했거나 요청을 수행할 수 없는 상태 |
1XX ( Informational : 조건부 응답)
: 클라이언트의 요청을 처리중인 상태
1) 100: Continue
- 서버에 클라이언트의 요청의 시작 부분이 받아들여졌으며 나머지를 기다리고 있는 상태.
2) 101: Switching Protocols
- 클라이언트가 서버에 프로토콜 전환을 요청했을 때, 서버가 이를 승인한 경우(변경 중임을 알려주는 상태코드).
3) 102: Processing
- 서버가 요청을 수신하고 처리중인 상태라 아직 응답을 할 수 없는 상태.
4) 103: Early Hints
- Link 헤더와 함께 사용되어 서버가 응답을 준비하는 동안 클라이언트가 사전 로딩(Pre-loading)을 할 수 있도록 하는 응답코드.
2XX (Success: 성공)
: 클라이언트의 요청을 수신하여 성공적으로 처리한 상태
1) 200: OK
- 요청 정상 처리됨.
2) 201: Created
- 요청이 정상 처리되어 리소스가 만들어짐.
3) 202: Accepted
- 요청은 승인됐지만, 처리되지는 않은 상태.
4) 204: No Content
- 요청은 정상 처리되었지만 응답에 본문(Body)가 없어 돌려줄 리소스가 없음.
- 처리 후 클라이언트에게 정보를 보낼 필요가 없는 경우에 사용됨
5) 206: Partial Content
- 리소스의 일부분만 제공되는 경우.
- 범위(range)가 지정된 요청일 경우에 사용된다. 예를 들면 클라이언트에서 다운로드 범위를 지정한 경우에 그 부분만 제공하기 위해 사용됨.
3XX (Redirection: 리디렉션 완료)
: 요청을 처리하는데 추가동작이 필요
1) 300: Multiple Choices
- 클라이언트의 요청에 대해 서버에서 여러 개의 응답이 있을 때, 사용자 에이전트 또는 사용자는 하나의 응답을 선택해야 함.
- 응답을 선택하는 방법은 표준화되지 않아 잘사용되지 않음.
2) 301: Moved Permanently
- 요청한 리소스의 URI가 영구적으로 변경됨 (새 URI를 사용해야함).
- 리다이렉트시, HTTP 메소드를 GET로 바꿔서 전송함.
3) 302: Found
- 요청한 리소스의 URI가 일시적으로 변경되었기에, 클라이언트는 향후 요청을 반드시 동일한 URI로 해야함.
- 리다이렉트시, HTTP 메소드를 GET로 바꿔서 전송함.
4) 303: See Other
- 요청한 리소스가 다른 URI에 있어서 별도의 GET 요청을 해서 얻어야 하는 경우, 서버가 클라이언트로 직접 보내는 응답임
5) 304: Not Modified
- 캐시 목적으로 사용됨
- 마지막 요청 이후에 리소스가 수정되지 않음을 알려주며, 클라이언트는 응답의 캐시된 버전 (로컬 캐시 리소스)를 사용할 수 있음.
- 리디렉션과는 관계없는 처리를 함
6) 307: Temporary Redirect
- 302 (요청한 리소스의 URI가 일시적으로 변경)와 같지만, 리다이렉트시 HTTP 메소드가 유지됨.
e.g.) POST로 요청했다면, 리다이렉트 시에도 POST 로 요청해야 한다.
7) 308: Permanent Redirect
- 301 (요청한 리소스의 URI가 영구적으로 변경됨)와 같지만, 리다이렉트시 HTTP 메소드가 유지됨.
e.g.) POST로 요청했다면, 리다이렉트 시에도 POST 로 요청해야 한다.
# Permanent Status - 301과 308은 상태는 유사하지만, 301은 리다이렉트시, HTTP 메소드를 GET 으로 바꿔서 전송하고, 308은 첫 HTTP 메소드를 리다이렉트시도 그대로(유지) 사용한다.
# Temporary Status - 302와 307은 상태는 유사하지만 302은 리다이렉트시, HTTP 메소드를 GET 으로 바꿔서 전송하고, 307은 첫 HTTP 메소드를 리다이렉트시도 그대로(유지) 사용한다.
4XX (Client Error: 클라이언트 에러)
: 클라이언트 측의 문제로 요청을 처리할 수 없는 상태
1) 400: Bad Request
- 클라이언트 쪽의 에러로 서버가 요청을 처리할 수 없는 상태 (잘못된 형식의 요청 구문)
2) 401: Unauthorised
Unautorised 로 표기되어 있지만 Unauthentication 이 더 이해하기 가까운 표현!
- 요청에 사용자 인증이 필요한 경우 (로그인 페이지 등).
- 응답에는 요청된 리소스에 적용할 수 있는 문제가 포함된 WWW-Authenticate 필드가 포함되어야 함 ( 어느 인증 방식을 사용할 것인지).
- 단순한 클라이언트 권한이 없는 경우는 403 Forbidden 사용해야 함.
3) 403: Forbidden
- 클라이언트가 접근할 권한이 없어, 서버가 요청을 거부하는 경우.
- 서버는 요청을 이해했고 클라이언트를 알고 있음, 단순히 접근권한 불충분으로 승인을 거부한 경우.
4) 404: Not Found
- 요청한 리소스를 찾을 수 없음.
5) 405: Method Not Allowed
- 클라이언트가 허용되지 않는 HTTP 메서드를 요청했을 경우.
- e.g) POST 요청받는 서버에 GET 으로 보내는 경우.
6) 407: Proxy Authentication Required
- 401과 비슷하지만, 클라이언트가 프록시에 의해 완료된 인증이 필요한 경우.
7) 408: Request Timeout
- 요청 시간이 초과된 경우.
8) 409: Conflict
- 요청이 서버의 상태와 충돌한 경우.
5XX (Server Error: 서버 에러)
: 서버가 요청을 수행하는데 문제가 발생한 상태
1) 500: Internal Server Error
- 서버가 요청 처리 중에 발생한 오류.
2) 502: Bad Gateway
- 서버가 게이트웨이에서 잘못된 응답을 받은 경우 (다른 서버로 부터 유효하지 않은 응답을 수신한 경우).
3) 503: Service Unavailable
- 서버가 요청을 처리할 수 없는 상태.
- 서버 과부화나 유지보수중의 이유로 요청 처리 불가함.
4) 504: Gateway Timeout
- 게이트웨이 역할을 하는 서버가 연결된 다른 서버로 부터 응답시간이 초과된 상태.
- 서버 간의 네트워크 오류이거나 실제 서버의 문제일 가능성이 큼.
5) 505: HTTP Version Not Supported
- 요청에 사용된 HTTP 버전이 해당 서버에서 지원이 안되는 경우.