Skip to content

HTTP Status Codes

Explains every common HTTP status code in plain language, with what to do about errors.

Your search stays on this device

This tool runs entirely inside your web browser. Your search is processed on your own device and is never sent to our servers. How this works

1xx Informational

The request was received and is still being processed.

100
ContinueThe server received the request headers; the client can send the body.
101
Switching ProtocolsThe server is switching protocol as requested, typically to WebSocket.
103
Early HintsPreliminary headers so the browser can start loading resources before the full response arrives.

2xx Success

The request worked.

200
OKThe request succeeded and the response contains the result.
201
CreatedA new resource was created, usually after a POST. The Location header often points to it.
202
AcceptedThe request was accepted for processing later, such as a queued job, but isn’t finished yet.
204
No ContentThe request succeeded and there is nothing to send back, common after DELETE or saving settings.
206
Partial ContentOnly part of the file was sent, as requested with a Range header; used for video streaming and resumable downloads.

3xx Redirection

The resource is somewhere else, or hasn’t changed.

301
Moved PermanentlyThe resource has a new permanent URL. Browsers and search engines update their links.What to do: Use 301 (or 308) when a page moves for good, so search rankings follow it.
302
FoundThe resource is temporarily at another URL. Clients keep using the original URL.
303
See OtherGo to another URL with GET, typically after submitting a form.
304
Not ModifiedThe cached copy is still current, so no body is sent. This saves bandwidth.
307
Temporary RedirectLike 302, but the client must repeat the same method and body at the new URL.
308
Permanent RedirectLike 301, but the client must repeat the same method and body at the new URL.

4xx Client errors

Something is wrong with the request: the URL, login, permissions or data sent.

400
Bad RequestThe server couldn’t understand the request.What to do: Check the request body is valid (for example, valid JSON), required fields are present, and parameters have the right format.
401
UnauthorizedYou need to log in, or the credentials sent were missing or invalid.What to do: Check the Authorization header or token. An expired token is the most common cause.
402
Payment RequiredReserved for payment systems; some APIs use it when a plan limit or subscription is needed.
403
ForbiddenThe server knows who you are but won’t let you access this.What to do: Check your account’s permissions or API key scopes. Firewalls and bot protection also return 403.
404
Not FoundNothing exists at this URL.What to do: Check the URL for typos. The page may have been moved or deleted, or an API route may be misspelled.
405
Method Not AllowedThe URL exists but doesn’t accept this HTTP method, for example POST to a read-only endpoint.What to do: Check the API documentation for the right method. The Allow header lists the accepted ones.
406
Not AcceptableThe server can’t produce a response in the format the Accept header asked for.
408
Request TimeoutThe client took too long to send the request.
409
ConflictThe request conflicts with the current state, such as creating something that already exists or editing an outdated version.
410
GoneThe resource was deliberately and permanently removed. Search engines drop it faster than a 404.
411
Length RequiredThe server needs a Content-Length header.
412
Precondition FailedA condition in the request headers (such as If-Match) wasn’t met, often because someone else changed the resource first.
413
Content Too LargeThe request body is bigger than the server allows.What to do: Upload a smaller file or raise the server’s limit (for example client_max_body_size in nginx).
414
URI Too LongThe URL is longer than the server accepts, often from too many query parameters.What to do: Send the data in a POST body instead of the URL.
415
Unsupported Media TypeThe server doesn’t accept the body’s format.What to do: Set the right Content-Type header, such as application/json.
416
Range Not SatisfiableThe requested byte range is outside the file.
418
I’m a TeapotAn April Fools’ joke from 1998 that some servers still return for fun or to reject unwanted requests.
421
Misdirected RequestThe request went to a server that can’t answer for this domain.
422
Unprocessable ContentThe request is well-formed but the data is invalid, such as a failed form validation.What to do: Read the response body: APIs usually say which field is wrong.
423
LockedThe resource is locked (WebDAV).
425
Too EarlyThe server won’t risk processing a request that might be replayed.
426
Upgrade RequiredThe client must switch to a different protocol, such as a newer TLS version.
428
Precondition RequiredThe server requires a conditional request (with If-Match) to prevent lost updates.
429
Too Many RequestsYou’ve sent too many requests in a given time (rate limiting).What to do: Wait and retry. The Retry-After header says how long; add back-off to your code.
431
Request Header Fields Too LargeThe request headers are too big, very often because of too many or oversized cookies.What to do: Clear the site’s cookies in your browser.
451
Unavailable For Legal ReasonsAccess is blocked for legal reasons, such as a court order or government censorship.

5xx Server errors

The server failed to handle a valid request.

500
Internal Server ErrorSomething went wrong on the server, and it has no more specific error to report.What to do: This is a bug or crash on the server side. Check the server logs; as a visitor, try again later.
501
Not ImplementedThe server doesn’t support the feature needed to handle the request.
502
Bad GatewayA proxy or load balancer got an invalid response from the server behind it.What to do: The application behind the proxy is usually down or crashing. Check that it is running and reachable.
503
Service UnavailableThe server is temporarily overloaded or down for maintenance.What to do: Try again later. Retry-After may say when.
504
Gateway TimeoutA proxy or load balancer waited too long for the server behind it.What to do: A slow database query or external API is often the cause. Check what the server was waiting for.
505
HTTP Version Not SupportedThe server doesn’t support the HTTP version used.
507
Insufficient StorageThe server can’t store what’s needed to complete the request.
508
Loop DetectedThe server found an infinite loop while processing the request.
511
Network Authentication RequiredYou need to log in to the network first, as on hotel or airport Wi-Fi.
520
Web Server Returned an Unknown Error (Cloudflare)Not a standard code: Cloudflare got an empty or unexpected response from the website’s server.
522
Connection Timed Out (Cloudflare)Not a standard code: Cloudflare couldn’t connect to the website’s server in time.

HTTP Status Codes is a plain-English reference to the status codes web servers send back: what each one means and, for errors, the usual causes and what to do. Search by number or keyword. It covers all standard codes you are likely to meet, plus a few common unofficial ones.

The five classes

Most common errors

How to check a website’s status code

Run curl -I https://example.com to see the status line and headers, or open the Network tab in your browser’s developer tools. Paste the headers into the HTTP Headers Analyzer for an explanation of each one.

Frequently asked questions

What is the difference between 401 and 403?

401 means “we don’t know who you are”: log in or send valid credentials. 403 means “we know who you are, but you’re not allowed”.

What is the difference between 301 and 302?

301 is a permanent move: browsers and search engines update to the new URL. 302 is temporary: they keep using the original URL.

What is the difference between 502 and 504?

Both come from a proxy or load balancer. 502 means the server behind it sent a broken response or none at all; 504 means it took too long to answer.

Are 520 and 522 real status codes?

They aren’t part of the HTTP standard; they are Cloudflare’s own codes for problems reaching a website’s server.

Last updated

Missing a feature, or need a tool we don’t have? Suggest it.