Complete HTTP Status Codes List & Reference

This is a comprehensive reference of every HTTP status code defined in the HTTP specification (RFC 9110) and common extensions. Use it as a quick lookup when you encounter a status code in your browser, server logs, or API responses.

For a beginner-friendly guide to the most common codes, see From 200 to 503: Understanding the Most Common HTTP Status Codes.


How HTTP Status Codes Work

Every HTTP response includes a three-digit status code. The first digit defines the class:

First DigitCategoryCountMeaning
1xxInformational4 codesThe request was received, processing continues
2xxSuccess10 codesThe request was successfully processed
3xxRedirection9 codesThe client must take additional action
4xxClient Error29 codesThe request has a problem
5xxServer Error12 codesThe server failed to process a valid request

1xx Informational Responses

These codes indicate that the server received the request and is continuing to process it. You rarely see these in practice.

CodeNameDescription
100ContinueThe server received the request headers and the client should send the request body. Used with the Expect: 100-continue header to avoid sending a large body if the server would reject it.
101Switching ProtocolsThe server is switching to a different protocol as requested by the client. Most commonly seen during a WebSocket handshake (Upgrade: websocket).
102ProcessingThe server received the request and is processing it, but no response is available yet. Defined by WebDAV (RFC 2518). Prevents the client from timing out on long operations.
103Early HintsThe server sends preliminary response headers before the final response. Used to let the browser start preloading resources (CSS, JS) while the server is still preparing the full response.

2xx Success

These codes indicate that the request was successfully received, understood, and processed.

CodeNameDescription
200OKThe request succeeded. The response body contains the requested data. This is the most common status code on the web. Learn more
201CreatedThe request succeeded and a new resource was created. Typically returned after a successful POST request. The response should include the new resource or a Location header pointing to it.
202AcceptedThe request was accepted for processing, but processing hasn't completed yet. Used for asynchronous operations like queued jobs or batch processing.
203Non-Authoritative InformationThe request succeeded, but the response has been modified by a proxy or intermediary. The data may not match what the origin server sent.
204No ContentThe request succeeded, but there's no content to return. Common response for DELETE operations or PUT updates where no response body is needed.
205Reset ContentThe request succeeded, and the client should reset the document view (e.g., clear a form). Rarely used in practice.
206Partial ContentThe server is returning only part of the resource, as requested by a Range header. Used for resumable downloads and video streaming.
207Multi-StatusThe response contains status information for multiple resources. Defined by WebDAV. The response body is an XML document with individual status codes.
208Already ReportedUsed inside a WebDAV 207 Multi-Status response to avoid listing the same resource multiple times.
226IM UsedThe server fulfilled a GET request with instance-manipulations applied. Defined by RFC 3229 (Delta Encoding). Rarely seen in practice.

3xx Redirection

These codes indicate that the client must take additional action to complete the request, usually by following a redirect to a different URL.

CodeNameDescription
300Multiple ChoicesThe request has multiple possible responses, and the client should choose one. Rarely used — most servers pick a default and redirect with 301/302 instead.
301Moved PermanentlyThe resource has permanently moved to a new URL (provided in the Location header). Browsers and search engines will update their references. SEO note: passes link equity to the new URL.
302FoundThe resource has temporarily moved to a different URL. The client should continue using the original URL for future requests. The HTTP method may change to GET on redirect (this ambiguity led to 307).
303See OtherThe server is redirecting to a different URL using GET. Commonly used after a POST submission to redirect to a confirmation page (Post/Redirect/Get pattern).
304Not ModifiedThe resource hasn't changed since the last request. The client should use its cached version. Triggered by conditional headers like If-None-Match (ETag) or If-Modified-Since. Saves bandwidth.
307Temporary RedirectSame as 302, but guarantees the HTTP method won't change. A POST redirect stays as POST. Use this instead of 302 when method preservation matters.
308Permanent RedirectSame as 301, but guarantees the HTTP method won't change. A POST redirect stays as POST. Use this instead of 301 when method preservation matters.

301 vs 302 vs 307 vs 308

CodePermanent?Preserves HTTP method?
301YesNo (may change to GET)
302NoNo (may change to GET)
307NoYes
308YesYes

4xx Client Errors

These codes indicate that the client made an error — the request is invalid, unauthorized, or the resource doesn't exist.

CodeNameDescription
400Bad RequestThe server can't process the request due to a client error: malformed syntax, invalid parameters, or bad request body. Check your JSON, query parameters, and headers.
401UnauthorizedThe request requires authentication. The client must provide valid credentials (API key, token, session). Despite the name, this is about authentication, not authorization. 401 vs 403 explained
402Payment RequiredReserved for future use. Some APIs use it to indicate that a paid subscription is required, but this is non-standard.
403ForbiddenThe server understood the request but refuses to authorize it. The client is authenticated but lacks permission. Re-authenticating won't help. 401 vs 403 explained
404Not FoundThe server can't find the requested resource. The most recognizable HTTP error. Could mean the URL is wrong, the page was deleted, or the API endpoint doesn't exist. 404 vs 500 explained
405Method Not AllowedThe HTTP method (GET, POST, PUT, DELETE) isn't supported for this URL. The response includes an Allow header listing valid methods. Example: trying to DELETE on a read-only endpoint.
406Not AcceptableThe server can't produce a response matching the client's Accept headers. Example: requesting Accept: application/xml from an API that only returns JSON.
407Proxy Authentication RequiredSimilar to 401, but the client must authenticate with a proxy server first.
408Request TimeoutThe server timed out waiting for the client to send the complete request. The client can retry the same request. Common with slow network connections.
409ConflictThe request conflicts with the current state of the server. Common examples: trying to create a resource that already exists, or editing a resource that was modified by someone else (optimistic concurrency conflict).
410GoneThe resource existed but has been permanently removed. Unlike 404, this is definitive — the resource is not coming back. Search engines will deindex the URL faster than with 404.
411Length RequiredThe server requires a Content-Length header, but the request didn't include one.
412Precondition FailedA condition in the request headers (If-Match, If-Unmodified-Since) evaluated to false. Used for conditional requests to prevent conflicts.
413Content Too LargeThe request body is larger than the server is willing to process. Example: uploading a file that exceeds the server's size limit. Previously called "Payload Too Large."
414URI Too LongThe URL is longer than the server can handle. Usually happens when a GET request includes too much data in query parameters. Consider using POST instead.
415Unsupported Media TypeThe server doesn't support the media type in the request. Example: sending Content-Type: text/plain to an endpoint that expects application/json.
416Range Not SatisfiableThe requested byte range (via Range header) is outside the resource's size. Example: requesting bytes 1000-2000 of a 500-byte file.
417Expectation FailedThe server can't meet the requirement in the Expect header.
418I'm a TeapotAn April Fools' joke from RFC 2324 (Hyper Text Coffee Pot Control Protocol). The server refuses to brew coffee because it's a teapot. Some APIs use this for Easter eggs.
421Misdirected RequestThe request was directed at a server that can't produce a response. Can happen with HTTP/2 connection coalescing.
422Unprocessable ContentThe request body is well-formed (valid JSON/XML) but contains semantic errors. Example: {"email": "not-an-email"}. Common in REST APIs for validation errors. Previously "Unprocessable Entity."
423LockedThe resource is locked. Defined by WebDAV.
424Failed DependencyThe request failed because it depended on another request that also failed. Defined by WebDAV.
425Too EarlyThe server is unwilling to process a request that might be replayed. Related to TLS 1.3 early data (0-RTT).
426Upgrade RequiredThe server refuses to process the request using the current protocol but might if the client upgrades. The response includes an Upgrade header (e.g., Upgrade: TLS/1.3).
428Precondition RequiredThe server requires the request to be conditional (include If-Match or similar headers). Prevents lost updates when multiple clients modify the same resource.
429Too Many RequestsThe client has sent too many requests in a given time period (rate limiting). The response may include a Retry-After header indicating when to try again. Implement exponential backoff in your client.
431Request Header Fields Too LargeThe request headers are too large for the server to process. Can happen with huge cookies or many custom headers.
451Unavailable For Legal ReasonsThe resource is blocked for legal reasons, such as government censorship or court-ordered takedowns. Named after Ray Bradbury's novel Fahrenheit 451.

5xx Server Errors

These codes indicate that the server failed to process a valid request. The problem is on the server side.

CodeNameDescription
500Internal Server ErrorA generic "something went wrong" error. The server encountered an unexpected condition. Check server logs for the actual error (stack trace, exception). 404 vs 500 explained
501Not ImplementedThe server doesn't support the functionality required to fulfill the request. Example: the server doesn't support the HTTP method used. Different from 405 (which means the method exists but isn't allowed for this resource).
502Bad GatewayA server acting as a gateway or proxy received an invalid response from the upstream server. Common with Nginx when the application server (Node.js, Python, etc.) crashes.
503Service UnavailableThe server is temporarily unable to handle requests due to maintenance or overload. Should include a Retry-After header. Use this for planned maintenance. 503 in detail
504Gateway TimeoutA gateway or proxy server didn't receive a response from the upstream server in time. Similar to 502, but the issue is timeout rather than an invalid response. Increase timeout settings or optimize the slow backend operation.
505HTTP Version Not SupportedThe server doesn't support the HTTP version used in the request.
506Variant Also NegotiatesThe server has an internal configuration error related to content negotiation. Very rare.
507Insufficient StorageThe server can't store the representation needed to complete the request. Defined by WebDAV.
508Loop DetectedThe server detected an infinite loop while processing the request. Defined by WebDAV.
510Not ExtendedThe server requires further extensions to the request to fulfill it.
511Network Authentication RequiredThe client needs to authenticate to gain network access. Commonly used by captive portals (hotel/airport Wi-Fi login pages).

Unofficial but Common Status Codes

These codes aren't part of the official HTTP specification but are used by specific servers or services:

CodeNameUsed ByDescription
420Enhance Your CalmTwitter (legacy)Rate limiting (now uses 429)
444No ResponseNginxThe server closed the connection without sending a response. Used to block malicious requests.
499Client Closed RequestNginxThe client closed the connection before the server finished responding.
520Web Server Returned Unknown ErrorCloudflareThe origin server returned something unexpected.
521Web Server Is DownCloudflareThe origin server refused the connection from Cloudflare.
522Connection Timed OutCloudflareCloudflare couldn't reach the origin server.
523Origin Is UnreachableCloudflareCloudflare can't reach the origin due to DNS issues.
524A Timeout OccurredCloudflareCloudflare connected but the origin didn't respond in time.
525SSL Handshake FailedCloudflareSSL/TLS handshake between Cloudflare and origin failed.
530Site FrozenPantheon / CloudflareThe site has been frozen (Pantheon) or an origin error with additional 1xxx error (Cloudflare).

Quick Reference by Use Case

Building a REST API?

ActionSuccessCommon Errors
Read a resource200401, 403, 404
Create a resource201400, 409, 422
Update a resource200 or 204400, 404, 409, 422
Delete a resource204401, 403, 404
List resources200401, 403
Async operation202400, 401

Debugging a Website?

SymptomLikely CodeWhat to Check
Page not loading500, 502, 503Server logs, is the server running?
Page not found404URL spelling, was the page moved?
Access denied401, 403Login status, permissions
Redirect loop301, 302Server redirect configuration
Slow page load504Backend performance, database queries

Monitoring Your Site?

Set up uptime monitoring to check your critical endpoints. Get alerted when responses change from 200 to error codes, before your users notice.


Further Reading