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.

Class

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
64 registered · 18 unofficial

Codes marked nginx, Cloudflare or AWS are not registered. Link to a code with its number, as in #404.