Every HTTP response comes with a status code that provides valuable information about how the request was processed. An HTTP status code is the first line in an HTTP response, which is sent from a server to the client. Understanding these status codes is essential for troubleshooting and building robust servers.
Status codes are expressed through three-digit numbers accompanied by a short description. The first digit of the number identifies the response group, which falls into five categories:
1xx
: Informational response - indicates that the request was received and understood.
2xx
: Successful response - indicates that the action requested by the client was received, understood, and accepted.
3xx
: Redirection - indicates that the client must take additional action to complete the request.
4xx
: Client error - indicates that an error occurred, seemingly caused by the client.
5xx
: Server error - indicates that an error occurred on the server.
Here is a comprehensive list of useful status codes, excluding technology-specific and rarely used ones.
Status code |
Description |
100 Continue |
The server has received the request headers, and the client should proceed to send the request body. To perform a header check, the client must include the Expect: 100-continue header in the initial request. If the client receives an error code such as 403 (Forbidden) or 405 (Method Not Allowed), it should not send the request body. |
101 Switching Protocols |
The client requested the server to switch protocols, and the server has agreed to do so. |
Successful Responses#
Status code |
Description |
200 OK |
The standard response for successful HTTP requests. |
201 Created |
Typically a response to a POST request, indicating that the request has been completed, and a new resource has been created. |
202 Accepted |
The request has been accepted for processing, but there’s no information about the actual processing or its result. |
203 Non-Authoritative Information |
The original server returned a 200 status code, but a transforming proxy between the client and server modified the payload. |
204 No Content |
The server successfully processed the request but is not returning any content. |
205 Reset Content |
The server successfully processed the request but is not returning any content. In addition, the server requires the client to reset its document view. |
206 Partial Content |
In response to a Range request from the client, the server sends a partial content response. |
Redirection#
Status code |
Description |
301 Moved Permanently |
All future requests should be directed to the given URI. Use this with GET/HEAD requests and 308 Permanent Redirect with other methods. |
302 Found |
The resource is temporarily moved to a URL specified by the Location header. Use this with GET/HEAD requests and 307 Temporary Redirect with other methods. |
303 See Other |
After a POST or PUT request, this status code points to the confirmation message in the Location header. It can be accessed using a new GET request. |
304 Not Modified |
Indicates that the resource has not been modified when the client uses the If-Modified-Since or If-None-Match request headers. |
307 Temporary Redirect |
Similar to the 302 request, but it does not allow changing the HTTP method. |
308 Permanent Redirect |
Similar to the 301 request, but it does not allow changing the HTTP method. |
Client Errors#
Status code |
Description |
400 Bad Request |
The server cannot process the request due to a client-generated error. This includes malformed requests or requests that are too large to handle. |
401 Unauthorized |
Sent when authentication is required, and the client is not authorized. |
403 Forbidden |
The requested resource is not available for various reasons. Prefer the 401 Unauthorized status code for authentication-related issues. |
404 Not Found |
The requested resource could not be found. |
405 Method Not Allowed |
The resource is not accessible via the HTTP method used in the request, but it might be available through another method. |
406 Not Acceptable |
The client provided an Accept header with values that the server does not support. |
407 Proxy Authentication Required |
The client must authenticate with a proxy server that sits between the client and server. |
408 Request Timeout |
The server timed out while waiting for the request. |
409 Conflict |
Indicates that the request could not be processed due to a conflict in the current state of the resource. This often occurs with simultaneous updates. |
410 Gone |
The resource is no longer available and will not be available again. Search engines interpret this as a signal to remove the resource from their index. |
411 Length Required |
The client must include a Content-Length header in the request, and it was missing. |
412 Precondition Failed |
Returned when the client’s request headers (If-Unmodified-Since or If-None-Match ) cannot be satisfied by the server. |
413 Payload Too Large |
The request is larger than the server can process or handle. |
414 URI Too Long |
The provided URI is too long for the server to process. |
415 Unsupported Media Type |
The request entity has a media type that the server or resource does not support. |
416 Range Not Satisfiable |
The client requested a portion of the file using the Range header, but the server cannot fulfill that request. |
417 Expectation Failed |
The server cannot meet the expectations specified in the Expect request header. |
421 Misdirected Request |
The request was directed at a server that cannot produce a response due to connection reuse or other issues. |
426 Upgrade Required |
The client should switch to a different protocol, as specified in the Upgrade header field. |
428 Precondition Required |
The server requires the request to include an If-Match header. |
429 Too Many Requests |
The user has exceeded the limit for the number of requests within a certain timeframe. It is commonly used for rate limiting. |
431 Request Header Fields Too Large |
The request cannot be fulfilled because one or more headers, or the entire header set, is too large. |
451 Unavailable For Legal Reasons |
The resource is not available due to legal reasons. |
Server Errors#
Status code |
Description |
500 Internal Server Error |
A generic server error message sent when an unexpected condition was encountered, and a more specific message is not available. |
501 Not Implemented |
The server does not recognize the request method or lacks the ability to fulfill the request. |
502 Bad Gateway |
The server, acting as a gateway or proxy, received an invalid response from the upstream server. |
503 Service Unavailable |
The server is currently temporarily unavailable, often due to being overloaded or undergoing maintenance. |
504 Gateway Timeout |
The server, acting as a gateway or proxy, did not receive a timely response from the upstream server. |
505 HTTP Version Not Supported |
The server does not support the HTTP protocol version specified in the request. |
Understanding HTTP status codes is crucial for building reliable and user-friendly applications. They provide valuable insights into the success or failure of requests and can guide developers in handling different scenarios effectively.