HTTP Status Codes
Every status code a server can answer with — what it means, why you're seeing it, and how to fix it. Click any code for causes, fixes and related codes, or test responses interactively with the HTTP Status Code Reference tool.
1xx — Informational
Interim responses — the request was received and processing continues.
The server received the request headers and the client should proceed to send the request body. Used with the Expect: 100-continue header on large uploads.
101 Switching ProtocolsThe server agrees to switch to the protocol the client requested in the Upgrade header — most commonly seen when establishing a WebSocket connection.
102 ProcessingThe server accepted the full request but has not completed it yet. A WebDAV interim response used to prevent client timeouts on long operations.
103 Early HintsAn interim response that lets the server send Link headers (preload/preconnect) before the final response is ready, so browsers can start fetching critical assets earlier.
2xx — Success
The request was received, understood and accepted.
The request succeeded. The response body contains the result — a page for GET, the operation outcome for POST.
201 CreatedThe request succeeded and a new resource was created. The Location header usually points at the new resource — the canonical response for a successful POST in REST APIs.
202 AcceptedThe request was accepted for processing, but processing hasn't completed — and may still fail. Common for queued/asynchronous jobs.
203 Non-Authoritative InformationThe request succeeded, but the response was modified by a transforming proxy between the origin and the client.
204 No ContentThe request succeeded and there is intentionally no response body. Typical for DELETE operations and for PUT/PATCH when the server returns nothing.
205 Reset ContentLike 204, but additionally tells the client to reset the document view — e.g. clear the form that produced the request.
206 Partial ContentThe server is delivering only the byte range requested via the Range header. The backbone of video streaming, download resumption and large-file delivery.
207 Multi-StatusA WebDAV response carrying multiple status codes for multiple resources in one XML body — e.g. a PROPFIND across a folder tree.
208 Already ReportedUsed inside a 207 Multi-Status body to avoid repeating members of a binding that were already listed earlier in the same response.
226 IM UsedThe response is the result of applying instance manipulations (such as a delta encoding) to the current resource. Rare in practice.
3xx — Redirection
Further action is needed — usually following a Location header.
More than one representation of the resource exists and the client should pick one. Rarely used — most servers pick a representation themselves.
301 Moved PermanentlyThe resource has permanently moved to the URL in the Location header. Browsers cache it and search engines transfer ranking signals to the new URL.
302 FoundThe resource temporarily lives at another URL. Search engines keep the original URL indexed; browsers don't cache the redirect.
303 See OtherTells the client to fetch a different URL with GET — the standard way to redirect after a POST (Post/Redirect/Get pattern).
304 Not ModifiedThe cached copy the client holds is still valid — the server sends no body. The result of conditional requests with If-None-Match (ETag) or If-Modified-Since.
307 Temporary RedirectLike 302, but the client must repeat the request to the new URL with the same method and body — a POST stays a POST.
308 Permanent RedirectPermanent counterpart of 307: the resource moved for good and the method/body must be preserved when following the redirect.
4xx — Client Error
The request is at fault — malformed, unauthorized, or targeting something that isn't there.
The server can't or won't process the request because the client sent something malformed — invalid JSON, bad query parameters, broken headers or framing.
401 UnauthorizedAuthentication is required and was missing or invalid. Despite the name, it means "unauthenticated" — the response includes a WWW-Authenticate challenge.
402 Payment RequiredReserved originally for digital payments; today used by some APIs to signal exceeded quotas, expired subscriptions, or billing problems.
403 ForbiddenThe server understood the request and refuses to authorize it. Unlike 401, re-authenticating won't help — the identity is known but lacks permission.
404 Not FoundThe server can't find anything at the requested URL. It says nothing about whether the resource ever existed or will exist.
405 Method Not AllowedThe URL exists but doesn't support the HTTP method used — e.g. POSTing to a GET-only endpoint. The Allow header lists what's permitted.
406 Not AcceptableThe server can't produce a response matching the client's Accept headers (content type, language, encoding).
407 Proxy Authentication RequiredLike 401, but the authentication challenge comes from a proxy between you and the target (Proxy-Authenticate header).
408 Request TimeoutThe server gave up waiting for the client to finish sending the request. Servers often close the connection afterwards.
409 ConflictThe request conflicts with the resource's current state — classic cases are duplicate creation and stale optimistic-locking versions.
410 GoneThe resource existed but was intentionally and permanently removed. Stronger than 404 — clients and crawlers should stop asking.
411 Length RequiredThe server insists on a Content-Length header and the request didn't include one (e.g. chunked uploads it refuses to accept).
412 Precondition FailedA conditional header (If-Match, If-Unmodified-Since…) evaluated to false — the resource changed since the client last saw it.
413 Content Too LargeThe request body exceeds what the server is willing to process. Formerly called 'Payload Too Large'.
414 URI Too LongThe request URL exceeds the server's limit — usually a symptom of stuffing data into the query string.
415 Unsupported Media TypeThe server refuses the request because the body's media type (Content-Type/Content-Encoding) isn't supported by the endpoint.
416 Range Not SatisfiableThe Range header asks for bytes outside the resource's actual size — e.g. resuming a download past the end of the file.
417 Expectation FailedThe server can't meet the requirements of the Expect header (almost always Expect: 100-continue).
418 I'm a teapotAn April Fools' joke from the Hyper Text Coffee Pot Control Protocol: the server is a teapot and refuses to brew coffee. Some real services use it as a playful block response.
421 Misdirected RequestThe request reached a server that isn't configured to answer for that scheme/authority — common with HTTP/2 connection reuse across hostnames.
422 Unprocessable ContentThe request is syntactically valid but semantically wrong — well-formed JSON that fails business validation (missing fields, invalid values).
423 LockedThe WebDAV resource is locked by another client and the request would violate the lock.
424 Failed DependencyThe request failed because an earlier request it depended on (in the same WebDAV operation) failed.
425 Too EarlyThe server refuses to process a request sent in TLS early data (0-RTT) because it might be replayed.
426 Upgrade RequiredThe server refuses to serve the request over the current protocol; the Upgrade header says which protocol to switch to.
428 Precondition RequiredThe server requires the request to be conditional — send If-Match/If-Unmodified-Since to avoid lost-update races.
429 Too Many RequestsThe client exceeded the rate limit. The Retry-After header (when present) says how long to back off.
431 Request Header Fields Too LargeHeaders (one or all together) are too large for the server — very often a bloated Cookie header.
451 Unavailable For Legal ReasonsAccess is denied for legal reasons — court orders, government censorship, or geo-specific legal restrictions (the number nods to Fahrenheit 451).
5xx — Server Error
The server failed to fulfill a valid request.
A generic 'something broke on the server' — an unhandled exception or misconfiguration with no more specific status to report.
501 Not ImplementedThe server doesn't support the functionality required — typically an HTTP method it doesn't implement at all (contrast 405: method known, not allowed here).
502 Bad GatewayA gateway/reverse proxy got an invalid response from the upstream server — the proxy is fine, the thing behind it isn't answering properly.
503 Service UnavailableThe server is temporarily unable to handle the request — overloaded, in maintenance, or deliberately shedding load. Retry-After may say when to come back.
504 Gateway TimeoutA gateway/proxy didn't get a response from the upstream in time. The upstream may still be processing — the proxy just gave up waiting.
505 HTTP Version Not SupportedThe server doesn't support the HTTP protocol version used in the request.
506 Variant Also NegotiatesA server misconfiguration in transparent content negotiation: the chosen variant is itself configured to negotiate, creating a loop.
507 Insufficient StorageThe server can't store what the request requires — disk or quota exhausted (WebDAV origin, seen in storage-backed APIs).
508 Loop DetectedThe server aborted an operation because it found itself in an infinite loop while processing (WebDAV bindings referencing each other).
510 Not ExtendedThe request must be extended (HTTP Extension Framework) for the server to fulfill it. Essentially unused on the modern web.
511 Network Authentication RequiredThe network (not the website) requires authentication first — the response captive portals send before you log in to hotel/airport Wi-Fi.