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:

  1. 1xx: Informational response - indicates that the request was received and understood.
  2. 2xx: Successful response - indicates that the action requested by the client was received, understood, and accepted.
  3. 3xx: Redirection - indicates that the client must take additional action to complete the request.
  4. 4xx: Client error - indicates that an error occurred, seemingly caused by the client.
  5. 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.

Informational Responses

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.