HTTP Status Codes
Every registered HTTP status code and the unofficial ones nginx, Cloudflare and AWS send, each with what it means and links to its RFC and MDN.
Status codes
| Code | Name | Meaning | References |
|---|---|---|---|
| 100 | Continue | The server has the request headers and the client should go on and send the body. The reply to Expect: 100-continue, so a large upload can be turned away before it is sent. | RFC 9110 §15.2.1 MDN |
| 101 | Switching Protocols | The server is switching to the protocol the client asked for in its Upgrade header, most often WebSocket. | RFC 9110 §15.2.2 MDN |
| 102 | Processing Deprecated | The server has accepted a WebDAV request and is still working on it. Dropped when RFC 4918 replaced RFC 2518. | RFC 2518 §10.1 MDN |
| 103 | Early Hints | Sent ahead of the final response with Link headers, so the browser can preload or preconnect while the server is still working. | RFC 8297 §2 MDN |
| 104 | Upload Resumption Supported Temporary | The server supports resumable uploads, and says where to resume one if the connection drops. A temporary registration for a draft standard. | IETF draft |
| 200 | OK | The request succeeded. The body depends on the method: the resource for a GET, the result of the action for a POST. | RFC 9110 §15.3.1 MDN |
| 201 | Created | The request succeeded and created a new resource, usually named in the Location header. | RFC 9110 §15.3.2 MDN |
| 202 | Accepted | The request was accepted for processing, which has not finished and may still fail. Used for work queued to run later. | RFC 9110 §15.3.3 MDN |
| 203 | Non-Authoritative Information | The request succeeded, but a proxy changed the response the origin server sent. | RFC 9110 §15.3.4 MDN |
| 204 | No Content | The request succeeded and there is no body. Common after a PUT or DELETE; a browser stays on the page it is on. | RFC 9110 §15.3.5 MDN |
| 205 | Reset Content | The request succeeded, and the client should reset what sent it, such as clearing a form. | RFC 9110 §15.3.6 MDN |
| 206 | Partial Content | The body is only the part of the resource asked for in a Range header. How a download resumes and a video seeks. | RFC 9110 §15.3.7 MDN |
| 207 | Multi-Status | A WebDAV response giving a separate status for each of several resources, in an XML body. | RFC 4918 §11.1 MDN |
| 208 | Already Reported | Used inside a WebDAV 207 response, so a resource reached by more than one path is listed only once. | RFC 5842 §7.1 MDN |
| 226 | IM Used | The server applied an instance manipulation, such as a delta encoding, to the resource it returned. Rarely seen. | RFC 3229 §10.4.1 MDN |
| 300 | Multiple Choices | The resource has more than one representation and the client should pick one. Rarely used, as there is no standard way to choose. | RFC 9110 §15.4.1 MDN |
| 301 | Moved Permanently | The resource has a new permanent URL, given in Location. A browser may change a POST to a GET when it follows; 308 does not allow that. | RFC 9110 §15.4.2 MDN |
| 302 | Found | The resource is at another URL for now, given in Location. A browser may change a POST to a GET when it follows; 307 does not allow that. | RFC 9110 §15.4.3 MDN |
| 303 | See Other | Fetch the URL in Location with a GET. The usual reply to a form POST, so reloading the next page does not submit the form again. | RFC 9110 §15.4.4 MDN |
| 304 | Not Modified | The cached copy is still good, so there is no body. The reply to a conditional request with If-None-Match or If-Modified-Since. | RFC 9110 §15.4.5 MDN |
| 305 | Use Proxy Deprecated | Asked the client to repeat the request through a proxy. Deprecated for security reasons, and browsers ignore it. | RFC 9110 §15.4.6 |
| 306 | (Unused) Unused | Was Switch Proxy in an early draft. Reserved, and not used. | RFC 9110 §15.4.7 |
| 307 | Temporary Redirect | The resource is at another URL for now, and the request must be repeated there with the same method and body. | RFC 9110 §15.4.8 MDN |
| 308 | Permanent Redirect | The resource has a new permanent URL, and the request must be repeated there with the same method and body. | RFC 9110 §15.4.9 MDN |
| 400 | Bad Request | The server will not process the request because of something the client got wrong, such as malformed syntax. | RFC 9110 §15.5.1 MDN |
| 401 | Unauthorized | Authentication is missing or failed. Sent with a WWW-Authenticate header saying how to authenticate. Despite the name, it means unauthenticated. | RFC 9110 §15.5.2 MDN |
| 402 | Payment Required | Reserved for future use. Some APIs send it for an unpaid account, with no standard meaning. | RFC 9110 §15.5.3 MDN |
| 403 | Forbidden | The server understood the request and refuses it. Unlike 401, authenticating again will not help. | RFC 9110 §15.5.4 MDN |
| 404 | Not Found | The server has nothing at this URL, or will not say whether it does. | RFC 9110 §15.5.5 MDN |
| 405 | Method Not Allowed | The resource exists but does not support this method. Sent with an Allow header listing the methods that do work. | RFC 9110 §15.5.6 MDN |
| 406 | Not Acceptable | The server has no representation that matches the Accept headers of the request. | RFC 9110 §15.5.7 MDN |
| 407 | Proxy Authentication Required | Like 401, but a proxy is asking for credentials, in a Proxy-Authenticate header. | RFC 9110 §15.5.8 MDN |
| 408 | Request Timeout | The server gave up waiting for the client to finish sending the request, and usually closes the connection. | RFC 9110 §15.5.9 MDN |
| 409 | Conflict | The request conflicts with the current state of the resource, such as an edit made to an outdated version. | RFC 9110 §15.5.10 MDN |
| 410 | Gone | The resource was removed on purpose and is not coming back. Unlike 404, it says the absence is permanent. | RFC 9110 §15.5.11 MDN |
| 411 | Length Required | The server will not accept the request without a Content-Length header. | RFC 9110 §15.5.12 MDN |
| 412 | Precondition Failed | A condition in the request headers, such as If-Match or If-Unmodified-Since, was not met. How lost updates are prevented. | RFC 9110 §15.5.13 MDN |
| 413 | Content Too Large | The request body is larger than the server will accept. Formerly Payload Too Large. | RFC 9110 §15.5.14 MDN |
| 414 | URI Too Long | The URL is longer than the server will process. Often a GET carrying data that belonged in a POST body. | RFC 9110 §15.5.15 MDN |
| 415 | Unsupported Media Type | The server does not accept the format of the request body, given in Content-Type or Content-Encoding. | RFC 9110 §15.5.16 MDN |
| 416 | Range Not Satisfiable | The Range asked for lies outside the resource, such as past the end of the file. | RFC 9110 §15.5.17 MDN |
| 417 | Expectation Failed | The server cannot meet what the Expect header of the request asks for. | RFC 9110 §15.5.18 MDN |
| 418 | (Unused) Unused | I'm a teapot, from an April Fools' RFC about coffee pots. Reserved so it is never assigned; some servers send it as a joke. | RFC 9110 §15.5.19 MDN |
| 421 | Misdirected Request | The request reached a server that cannot answer for this host, often over an HTTP/2 connection reused for another host. | RFC 9110 §15.5.20 MDN |
| 422 | Unprocessable Content | The body is well formed, but what it says is invalid, such as a field that fails validation. Formerly Unprocessable Entity. | RFC 9110 §15.5.21 MDN |
| 423 | Locked | The WebDAV resource is locked. | RFC 4918 §11.3 MDN |
| 424 | Failed Dependency | The WebDAV request failed because another action it depended on failed. | RFC 4918 §11.4 MDN |
| 425 | Too Early | The server will not process a request sent in TLS early data, since it could be replayed. | RFC 8470 §5.2 MDN |
| 426 | Upgrade Required | The server will not handle the request over this protocol, and names the one to use in an Upgrade header. | RFC 9110 §15.5.22 MDN |
| 428 | Precondition Required | The server requires a conditional request, with If-Match for example, to prevent lost updates. | RFC 6585 §3 MDN |
| 429 | Too Many Requests | The client sent too many requests in a given time and is being rate limited. May carry a Retry-After header. | RFC 6585 §4 MDN |
| 431 | Request Header Fields Too Large | The request headers are too large, all together or one alone. Often an oversized cookie. | RFC 6585 §5 MDN |
| 444 | (No name) Unofficial · nginx | nginx closes the connection without sending anything. Set in its configuration to drop unwanted requests. | nginx |
| 451 | Unavailable For Legal Reasons | The resource cannot be served for legal reasons, such as a court order. The number is a nod to Fahrenheit 451. | RFC 7725 §3 MDN |
| 460 | (No name) Unofficial · AWS | An AWS Application Load Balancer had a request, but the client closed the connection before the idle timeout. | AWS ALB |
| 463 | (No name) Unofficial · AWS | An AWS Application Load Balancer received an X-Forwarded-For header listing more than 30 IP addresses. | AWS ALB |
| 464 | (No name) Unofficial · AWS | An AWS Application Load Balancer received a request in a protocol its target group is not set up for, such as HTTP/1.1 for gRPC. | AWS ALB |
| 494 | Request Header Or Cookie Too Large Unofficial · nginx | nginx found the request headers larger than its buffers allow. It can be caught with error_page; the client is sent 400. | nginx source |
| 495 | SSL Certificate Error Unofficial · nginx | The client certificate failed verification. It can be caught with error_page; the client is sent 400. | nginx |
| 496 | No Required SSL Certificate Was Sent Unofficial · nginx | The client did not present a certificate nginx requires. It can be caught with error_page; the client is sent 400. | nginx |
| 497 | Plain HTTP Request Sent to HTTPS Port Unofficial · nginx | A plain HTTP request arrived on a port that expects HTTPS. It can be caught with error_page; the client is sent 400. | nginx |
| 499 | Client Closed Request Unofficial · nginx | The client closed the connection before nginx sent a response, often while waiting on a slow upstream. Seen only in the nginx log. | nginx source |
| 500 | Internal Server Error | The server hit an unexpected condition and could not fulfill the request. The generic server side failure. | RFC 9110 §15.6.1 MDN |
| 501 | Not Implemented | The server does not support what the request needs, such as a method it does not recognize. | RFC 9110 §15.6.2 MDN |
| 502 | Bad Gateway | A gateway or proxy got an invalid response from the server behind it. | RFC 9110 §15.6.3 MDN |
| 503 | Service Unavailable | The server cannot handle the request right now, because it is overloaded or down for maintenance. May carry Retry-After. | RFC 9110 §15.6.4 MDN |
| 504 | Gateway Timeout | A gateway or proxy did not get a response in time from the server behind it. | RFC 9110 §15.6.5 MDN |
| 505 | HTTP Version Not Supported | The server does not support the HTTP version the request used. | RFC 9110 §15.6.6 MDN |
| 506 | Variant Also Negotiates | A server misconfiguration in transparent content negotiation: the variant chosen is itself set up to negotiate. | RFC 2295 §8.1 MDN |
| 507 | Insufficient Storage | The WebDAV server cannot store what it needs to complete the request. | RFC 4918 §11.5 MDN |
| 508 | Loop Detected | The WebDAV server found an infinite loop while processing a request with Depth: infinity. | RFC 5842 §7.2 MDN |
| 510 | Not Extended Obsolete | The request did not meet the policy for an HTTP extension the server requires. The extension framework is now historic. | RFC 2774 §7 MDN |
| 511 | Network Authentication Required | The client must sign in to the network first, as at a hotel or airport. Sent by the network, not the site. | RFC 6585 §6 MDN |
| 520 | Web Server Returns an Unknown Error Unofficial · Cloudflare | The origin server sent Cloudflare an empty, unknown or unexpected response. | Cloudflare |
| 521 | Web Server Is Down Unofficial · Cloudflare | The origin server refused the connection from Cloudflare. | Cloudflare |
| 522 | Connection Timed Out Unofficial · Cloudflare | Cloudflare timed out trying to connect to the origin server. | Cloudflare |
| 523 | Origin Is Unreachable Unofficial · Cloudflare | Cloudflare cannot reach the origin server, usually because no route leads to its IP address. | Cloudflare |
| 524 | A Timeout Occurred Unofficial · Cloudflare | Cloudflare connected to the origin server, but it did not send an HTTP response in time. | Cloudflare |
| 525 | SSL Handshake Failed Unofficial · Cloudflare | The TLS handshake between Cloudflare and the origin server failed. | Cloudflare |
| 526 | Invalid SSL Certificate Unofficial · Cloudflare | Cloudflare could not verify the certificate of the origin server. | Cloudflare |
| 530 | (No name) Unofficial · Cloudflare | Cloudflare could not resolve the hostname of the origin server. | Cloudflare |
| 561 | Unauthorized Unofficial · AWS | An AWS Application Load Balancer set to authenticate users got an error back from the identity provider. | AWS ALB |
No status code matches.
64 registered · 18 unofficial
Codes marked nginx, Cloudflare or AWS are not registered. Link to a code with its number, as in #404.