HTTP Status Codes List: Meaning and What to Check for Each Code
Look up any HTTP status code, such as 404, 301, 429 or 502, with a plain explanation and what to check when you see it.
Search the table by number or word to see what an HTTP status code means and what to check. It covers the standard codes plus the common nginx and Cloudflare ones that you meet when running a site.
1xx: Information
| Code | Name | What it means | What to check |
|---|---|---|---|
| 100 | Continue | The server got the start of the request and the client may send the rest. | Normal. It is sent when a client asks first with an Expect: 100-continue header. |
| 101 | Switching Protocols | The server agrees to change protocol, usually from HTTP to WebSocket. | Normal for WebSockets. If it never appears, check the Upgrade and Connection headers on your proxy. |
| 102 | Processing | The server has the request and is still working on it (WebDAV). | Rare. Wait for the final answer. |
| 103 | Early Hints | The server sends link headers early so the browser can start loading files. | Normal. It comes before the final response. |
2xx: Success
| Code | Name | What it means | What to check |
|---|---|---|---|
| 200 | OK | The request worked and the answer is in the body. | Nothing to fix. |
| 201 | Created | The request worked and a new item now exists. | Normal after a POST that creates something. The Location header often points to it. |
| 202 | Accepted | The server took the request and will process it later. | Normal for background jobs. Check the job status separately. |
| 203 | Non-Authoritative Information | The answer is OK but was changed by a proxy on the way. | Rare. Only matters if you rely on exact headers. |
| 204 | No Content | The request worked and there is nothing to send back. | Normal for DELETE and some PUT requests. Do not try to read a body. |
| 205 | Reset Content | The request worked and the client should clear its form or view. | Rare. |
| 206 | Partial Content | The server sends only the part of the file that was asked for. | Normal for video, audio and resumed downloads (Range requests). |
| 207 | Multi-Status | Several results in one answer (WebDAV). | Read each result inside the body. |
| 208 | Already Reported | Items were already listed earlier in this answer (WebDAV). | Rare. |
| 226 | IM Used | The answer is the result of one or more changes applied to the current item. | Rare. |
3xx: Redirection
| Code | Name | What it means | What to check |
|---|---|---|---|
| 300 | Multiple Choices | There is more than one possible answer for this address. | Rare. Pick one of the links offered. |
| 301 | Moved Permanently | The page has a new address for good. | Update your links to the new address. Search engines move to it. Redirect loops often come from conflicting 301 rules. |
| 302 | Found | The page is at another address for now. | Normal for temporary redirects such as login. Use 301 or 308 when the move is permanent. |
| 303 | See Other | Fetch the result from another address with GET. | Normal after a form POST so that a reload does not send it again. |
| 304 | Not Modified | Your cached copy is still current, so nothing is sent. | Normal and good: it saves bandwidth. Check ETag and Last-Modified headers if caching misbehaves. |
| 305 | Use Proxy | The page must be fetched through a proxy. | Deprecated. Browsers ignore it. |
| 307 | Temporary Redirect | Repeat the same request at another address for now, with the same method. | Like 302, but a POST stays a POST. |
| 308 | Permanent Redirect | Repeat the same request at another address for good, with the same method. | Like 301, but a POST stays a POST. |
4xx: Client errors
| Code | Name | What it means | What to check |
|---|---|---|---|
| 400 | Bad Request | The server could not understand the request. | Check the address, the JSON body, the headers and the cookie size. Very large cookies cause 400 as well. |
| 401 | Unauthorized | You must sign in (or your login was not accepted). | Send valid credentials, for example an Authorization header. Check the token has not expired. |
| 402 | Payment Required | Reserved for payment systems. | Only used by some APIs, to say a payment or plan limit is needed. |
| 403 | Forbidden | The server understood you but will not let you in. | Check permissions, file ownership, IP allow lists and API scopes. On a web server also check the index file and folder permissions. |
| 404 | Not Found | There is nothing at this address. | Check the spelling of the address, and that the file or route exists. Fix broken links and add a redirect if the page moved. |
| 405 | Method Not Allowed | The address exists but does not accept this method (such as POST). | Use the method the route allows. Check the Allow header in the answer and your server or router config. |
| 406 | Not Acceptable | The server cannot make an answer in the format your Accept header asks for. | Change or remove the Accept header. |
| 407 | Proxy Authentication Required | You must sign in to the proxy first. | Give the proxy a user name and password. |
| 408 | Request Timeout | The server gave up waiting for the request to arrive. | Check the network. Retry. Slow uploads may need a longer server timeout. |
| 409 | Conflict | The request clashes with the current state, such as a duplicate or an edit clash. | Fetch the latest version of the item and try again, or use a different unique value. |
| 410 | Gone | The page was removed on purpose and will not come back. | Remove links to it. Search engines drop 410 pages faster than 404. |
| 411 | Length Required | The request needs a Content-Length header. | Add the header or send the body in a way the client library sizes for you. |
| 412 | Precondition Failed | A condition in the request headers (such as If-Match) was not true. | Re-fetch the item to get a fresh ETag. |
| 413 | Content Too Large | The request body is bigger than the server allows. | Send less data, or raise the limit: nginx client_max_body_size, PHP upload_max_filesize and post_max_size. |
| 414 | URI Too Long | The address is longer than the server accepts. | Send the data in a POST body instead of the query string. |
| 415 | Unsupported Media Type | The server does not accept the format of the body. | Set the right Content-Type header, such as application/json. |
| 416 | Range Not Satisfiable | The requested part of the file is outside its size. | Check the Range header and the file size. |
| 417 | Expectation Failed | The server cannot meet the Expect header. | Remove the Expect header, for example with curl -H "Expect:". |
| 418 | I'm a teapot | A joke code from 1998 (RFC 2324). Some servers use it to refuse bots. | Nothing to fix. It is a deliberate answer. |
| 421 | Misdirected Request | The request went to a server that cannot answer for that host name. | Check the host name and TLS certificate setup on the server. |
| 422 | Unprocessable Content | The format is right but the values are not acceptable. | Read the error list in the body. Common in APIs for failed validation. |
| 423 | Locked | The item is locked (WebDAV). | Unlock it, or wait for the lock to end. |
| 424 | Failed Dependency | The request failed because an earlier request it depended on failed (WebDAV). | Fix the first error. |
| 425 | Too Early | The server will not process a request that could be replayed. | Retry once the connection is fully set up. |
| 426 | Upgrade Required | The client must switch to a newer protocol. | Use the protocol named in the Upgrade header, often TLS or HTTP/2. |
| 428 | Precondition Required | The server wants a condition header such as If-Match. | Add the header to avoid overwriting someone else's change. |
| 429 | Too Many Requests | You sent too many requests in a short time. | Slow down. Wait for the time in the Retry-After header. Add caching or back-off in your code. |
| 431 | Request Header Fields Too Large | The headers, often cookies, are too big. | Clear cookies for the site, or raise the header size limits on the server. |
| 451 | Unavailable For Legal Reasons | The content is blocked for legal reasons. | Nothing to fix on your side. The page is withheld by law or order. |
5xx: Server errors
| Code | Name | What it means | What to check |
|---|---|---|---|
| 500 | Internal Server Error | Something went wrong on the server and it has no more detail for you. | Read the server error log. Look for a crash, a bad config line (such as in .htaccess), or a failed database call. |
| 501 | Not Implemented | The server does not support the method or feature requested. | Use a method the server supports, or update the server. |
| 502 | Bad Gateway | A server acting as a proxy got a bad answer from the server behind it. | Check the app behind nginx or your load balancer is running and the port or socket is right. Read the proxy error log. |
| 503 | Service Unavailable | The server cannot handle the request right now, often due to overload or maintenance. | Wait and retry. Check server load and that the app is running. A Retry-After header may tell you when. |
| 504 | Gateway Timeout | The proxy waited too long for the server behind it. | Find out why the app is slow, or raise the proxy timeout (proxy_read_timeout in nginx). |
| 505 | HTTP Version Not Supported | The server does not support the HTTP version used. | Use a version the server supports, such as HTTP/1.1. |
| 506 | Variant Also Negotiates | A server configuration error in content negotiation. | Fix the server setup. |
| 507 | Insufficient Storage | The server has no space to store the result (WebDAV). | Free disk space on the server. |
| 508 | Loop Detected | The server found an endless loop (WebDAV). | Fix the circular link or binding. |
| 510 | Not Extended | The server needs more extensions in the request. | Rare. |
| 511 | Network Authentication Required | You must sign in to the network first, such as at a hotel Wi-Fi page. | Open a web page in your browser and complete the login. |
Not standard: nginx and Cloudflare codes
| Code | Name | What it means | What to check |
|---|---|---|---|
| 499 | Client Closed Request | Nginx only: the visitor closed the connection before the server answered. | Usually harmless. If it is frequent, the app is too slow, so look at timeouts. |
| 520 | Web Server Returned an Unknown Error | Cloudflare only: the server behind it sent an answer Cloudflare could not understand. | Check your server logs and look for crashes or oversized headers. |
| 521 | Web Server Is Down | Cloudflare only: your server refused the connection. | Start the web server and let Cloudflare IP addresses through your firewall. |
| 522 | Connection Timed Out | Cloudflare only: your server did not answer in time. | Check the server is reachable and not overloaded. Check firewall rules. |
| 523 | Origin Is Unreachable | Cloudflare only: Cloudflare cannot reach your server. | Check the DNS record points to the right IP address and the server is online. |
| 524 | A Timeout Occurred | Cloudflare only: your server accepted the connection but took too long to answer. | Speed up the slow request or move it to a background job. |
| 525 | SSL Handshake Failed | Cloudflare only: the secure connection to your server failed. | Check the certificate and the TLS versions on your server. |
| 526 | Invalid SSL Certificate | Cloudflare only: your server certificate is not valid. | Install a valid certificate, or change the SSL mode. |
What it does
- 70 status codes in one searchable table, grouped from 1xx to 5xx.
- Each code has a plain meaning and a short "what to check" note.
- Includes nginx 499 and Cloudflare 520 to 526.
- Link straight to a code with an address like /tools/http-status-codes#s404.
Frequently asked questions
- What is the difference between 301 and 302?
- 301 means the page moved for good, so search engines switch to the new address. 302 means it is elsewhere for now, so they keep the old one.
- What is the difference between 401 and 403?
- 401 means you have not proven who you are, or your login was rejected. 403 means the server knows who you are but will not let you in.
- What is the difference between 502, 503 and 504?
- 502 means a bad answer from the server behind a proxy. 503 means the service is overloaded or down for now. 504 means the proxy waited too long for the server behind it.
- Where do status codes come from?
- The standard ones are defined in RFC 9110 and registered by IANA. A few, such as 499 and 520 to 526, are used by specific products and are not part of the standard.
More tools
Code formatters
CSS beautifier CSS minifier HTML beautifier HTML minifier JavaScript beautifier JavaScript minifier JSON formatter YAML formatter XML formatter SQL formatter Markdown preview
Converters
Base64 encoder and decoder URL encoder and decoder Unix timestamp converter CSV to JSON JSON to CSV HTML entity encoder and decoder Number base converter Time zone converter JSON to TypeScript XML to JSON HTML to Markdown Date difference calculator
Text tools
Regex tester Remove duplicate lines Lorem ipsum generator Word counter Case converter Text diff checker
Color and images
Color converter Contrast checker Image to Base64 Image resizer
Network
Subnet calculator Download time calculator Common ports list CIDR to IP range IPv6 address expander and compressor MAC address formatter curl command builder
Server and files
Cron expression explainer chmod calculator
Encoding and security
Password generator UUID generator Hash generator JWT decoder QR code generator Password strength checker Wi-Fi QR code generator