Recent from talks
Nothing was collected or created yet.
List of HTTP status codes
View on Wikipedia
| HTTP |
|---|
| Request methods |
| Header fields |
| Response status codes |
| Security access control methods |
| Security vulnerabilities |
Hypertext Transfer Protocol (HTTP) response status codes are issued by a server in response to a client's request made to the server. It includes codes from IETF Request for Comments (RFCs), other specifications, and some additional codes used in some common applications of the HTTP. The first digit of the status code specifies one of five standard classes of responses. The optional message phrases shown are typical, but any human-readable alternative may be provided, or none at all.
Unless otherwise stated, the status code is part of the HTTP standard.[1]
The Internet Assigned Numbers Authority (IANA) maintains the official registry of HTTP status codes.[2]
All HTTP response status codes are separated into five classes or categories. The first digit of the status code defines the class of response, while the last two digits do not have any classifying or categorization role. There are five classes defined by the standard:
- 1xx informational response – the request was received, continuing process
- 2xx successful – the request was successfully received, understood, and accepted
- 3xx redirection – further action needs to be taken in order to complete the request
- 4xx client error – the request contains bad syntax or cannot be fulfilled
- 5xx server error – the server failed to fulfil an apparently valid request
1xx informational response
[edit]An informational response indicates that the request was received and understood. It is issued on a provisional basis while request processing continues. It alerts the client to wait for a final response. The message consists only of the status line and optional header fields, and is terminated by an empty line. As the HTTP/1.0 standard did not define any 1xx status codes, servers must not[note 1] send a 1xx response to an HTTP/1.0 compliant client except under experimental conditions.
- 100 Continue
- The server has received the request headers and the client should proceed to send the request body (in the case of a request for which a body needs to be sent; for example, a POST request). Sending a large request body to a server after a request has been rejected for inappropriate headers would be inefficient. To have a server check the request's headers, a client must send
Expect: 100-continueas a header in its initial request and receive a100 Continuestatus code in response before sending the body. If the client receives an error code such as 403 (Forbidden) or 405 (Method Not Allowed) then it should not send the request's body. The response417 Expectation Failedindicates that the request should be repeated without theExpectheader as it indicates that the server does not support expectations (this is the case, for example, of HTTP/1.0 servers).[1]: §10.1.1 - 101 Switching Protocols
- The requester has asked the server to switch protocols and the server has agreed to do so.
- 102 Processing (WebDAV; RFC 2518)
- A WebDAV request may contain many sub-requests involving file operations, requiring a long time to complete the request. This code indicates that the server has received and is processing the request, but no response is available yet.[3] This prevents the client from timing out and assuming the request was lost. The status code is deprecated.[4]
- 103 Early Hints (RFC 8297)
- Used to return some response headers before final HTTP message.[5]
2xx success
[edit]This class of status codes indicates the action requested by the client was received, understood, and accepted.[2]
- 200 OK
- Standard response for successful HTTP requests. The actual response will depend on the request method used. In a GET request, the response will contain an entity corresponding to the requested resource. In a POST request, the response will contain an entity describing or containing the result of the action.
- 201 Created
- The request has been fulfilled, resulting in the creation of a new resource.[6]
- 202 Accepted
- The request has been accepted for processing, but the processing has not been completed. The request might or might not be eventually acted upon, and may be disallowed when processing occurs.
- 203 Non-Authoritative Information (since HTTP/1.1)
- The server is a transforming proxy (e.g. a Web accelerator) that received a 200 OK from its origin, but is returning a modified version of the origin's response.[1]: §15.3.4 [1]: §7.7
- 204 No Content
- The server successfully processed the request, and is not returning any content.
- 205 Reset Content
- The server successfully processed the request, asks that the requester reset its document view, and is not returning any content.
- 206 Partial Content
- The server is delivering only part of the resource (byte serving) due to a range header sent by the client. The range header is used by HTTP clients to enable resuming of interrupted downloads, or split a download into multiple simultaneous streams.
- 207 Multi-Status (WebDAV; RFC 4918)
- The message body that follows is by default an XML message and can contain a number of separate response codes, depending on how many sub-requests were made.[7]
- 208 Already Reported (WebDAV; RFC 5842)
- The members of a DAV binding have already been enumerated in a preceding part of the (multistatus) response, and are not being included again.
- 226 IM Used (RFC 3229)
- The server has fulfilled a request for the resource, and the response is a representation of the result of one or more instance-manipulations applied to the current instance.[8]
3xx redirection
[edit]This class of status code indicates the client must take additional action to complete the request. Many of these status codes are used in URL redirection.[2]
A user agent may carry out the additional action with no user interaction only if the method used in the second request is GET or HEAD. A user agent may automatically redirect a request. A user agent should detect and intervene to prevent cyclical redirects.[1]: §15.4
- 300 Multiple Choices
- Indicates multiple options for the resource from which the client may choose (via agent-driven content negotiation). For example, this code could be used to present multiple video format options, to list files with different filename extensions, or to suggest word-sense disambiguation.
- 301 Moved Permanently
- This and all future requests should be directed to the given URI.
- 302 Found (Previously "Moved temporarily")
- Tells the client to look at (browse to) another URL. The HTTP/1.0 specification required the client to perform a temporary redirect with the same method (the original describing phrase was "Moved Temporarily"),[9] but popular browsers implemented 302 redirects by changing the method to GET. Therefore, HTTP/1.1 added status codes 303 and 307 to distinguish between the two behaviours.[1]: §15.4
- 303 See Other (since HTTP/1.1)
- The response to the request can be found under another URI using the GET method. When received in response to a POST (or PUT/DELETE), the client should presume that the server has received the data and should issue a new GET request to the given URI.
- 304 Not Modified
- Indicates that the resource has not been modified since the version specified by the request headers If-Modified-Since or If-None-Match. In such case, there is no need to retransmit the resource since the client still has a previously-downloaded copy.
- 305 Use Proxy (since HTTP/1.1)
- The requested resource is available only through a proxy, the address for which is provided in the response. For security reasons, many HTTP clients (such as Mozilla Firefox and Internet Explorer) do not obey this status code.[10]
- 306 Switch Proxy
- No longer used. Originally meant "Subsequent requests should use the specified proxy."
- 307 Temporary Redirect (since HTTP/1.1)
- In this case, the request should be repeated with another URI; however, future requests should still use the original URI. In contrast to how 302 was historically implemented, the request method is not allowed to be changed when reissuing the original request. For example, a POST request should be repeated using another POST request.
- 308 Permanent Redirect
- This and all future requests should be directed to the given URI. 308 parallels the behavior of 301, but does not allow the HTTP method to change. So, for example, submitting a form to a permanently redirected resource may continue smoothly.
4xx client errors
[edit]
This class of status code is intended for situations in which the error seems to have been caused by the client. Except when responding to a HEAD request, the server should include an entity containing an explanation of the error situation, and whether it is a temporary or permanent condition. These status codes are applicable to any request method. User agents should display any included entity to the user.
- 400 Bad Request
- The server cannot or will not process the request due to an apparent client error (e.g., malformed request syntax, size too large, invalid request message framing, or deceptive request routing).
- 401 Unauthorized
- Similar to 403 Forbidden, but specifically for use when authentication is required and has failed or has not yet been provided. The response must include a WWW-Authenticate header field containing a challenge applicable to the requested resource. See Basic access authentication and Digest access authentication. 401 semantically means "unauthenticated", the user does not have valid authentication credentials for the target resource.
- 402 Payment Required
- Reserved for future use. The original intention was that this code might be used as part of some form of digital cash or micropayment scheme, as proposed, for example, by GNU Taler,[11] but that has not yet happened, and this code is not widely used. Google Developers API uses this status if a particular developer has exceeded the daily limit on requests.[12] Sipgate uses this code if an account does not have sufficient funds to start a call.[13] Shopify uses this code when the store has not paid their fees and is temporarily disabled.[14] Stripe uses this code for failed payments where parameters were correct, for example blocked fraudulent payments.[15]
- 403 Forbidden
- The request contained valid data and was understood by the server, but the server is refusing action. This may be due to the user not having the necessary permissions for a resource or needing an account of some sort, or attempting a prohibited action (e.g. creating a duplicate record where only one is allowed). This code is also typically used if the request provided authentication by answering the WWW-Authenticate header field challenge, but the server did not accept that authentication. The request should not be repeated.
- 404 Not Found
- The requested resource could not be found but may be available in the future. Subsequent requests by the client are permissible.
- 405 Method Not Allowed
- A request method is not supported for the requested resource; for example, a GET request on a form that requires data to be presented via POST, or a PUT request on a read-only resource.
- 406 Not Acceptable
- The requested resource is capable of generating only content not acceptable according to the Accept headers sent in the request. See Content negotiation.
- 407 Proxy Authentication Required
- The client must first authenticate itself with the proxy.
- 408 Request Timeout
- The server timed out waiting for the request. According to HTTP specifications: "The client did not produce a request within the time that the server was prepared to wait. The client MAY repeat the request without modifications at any later time."
- 409 Conflict
- Indicates that the request could not be processed because of conflict in the current state of the resource, such as an edit conflict between multiple simultaneous updates.[16]
- 410 Gone
- Indicates that the resource requested was previously in use but is no longer available and will not be available again. This should be used when a resource has been intentionally removed and the resource should be purged. Upon receiving a 410 status code, the client should not request the resource in the future. Clients such as search engines should remove the resource from their indices. Most use cases do not require clients and search engines to purge the resource, and a "404 Not Found" may be used instead.
- 411 Length Required
- The request did not specify the length of its content, which is required by the requested resource.
- 412 Precondition Failed
- The server does not meet one of the preconditions that the requester put on the request header fields.
- 413 Payload Too Large
- The request is larger than the server is willing or able to process. Previously called "Request Entity Too Large".[17]: §10.4.14
- 414 URI Too Long
- The URI provided was too long for the server to process. Often the result of too much data being encoded as a query-string of a GET request, in which case it should be converted to a POST request. Called "Request-URI Too Long" previously.[17]: §10.4.15
- 415 Unsupported Media Type
- The request entity has a media type which the server or resource does not support. For example, the client uploads an image as image/svg+xml, but the server requires that images use a different format.
- 416 Range Not Satisfiable
- The client has asked for a portion of the file (byte serving), but the server cannot supply that portion. For example, if the client asked for a part of the file that lies beyond the end of the file. Called "Requested Range Not Satisfiable" previously.[17]: §10.4.17
- 417 Expectation Failed
- The server cannot meet the requirements of the Expect request-header field.[18]
- 418 I'm a teapot (RFC 2324, RFC 7168)
- This code was defined in 1998 as one of the traditional IETF April Fools' jokes, in RFC 2324, Hyper Text Coffee Pot Control Protocol, and is not expected to be implemented by actual HTTP servers. The RFC specifies this code should be returned by teapots requested to brew coffee.[19] This HTTP status is used as an Easter egg in some websites, such as Google.com's "I'm a teapot" easter egg.[20][21][22] Sometimes, this status code is also used as a response to a blocked request, instead of the more appropriate 403 Forbidden.[23][24]
- 421 Misdirected Request
- The request was directed at a server that is not able to produce a response (for example because of connection reuse).
- 422 Unprocessable Content
- The request was well-formed (i.e., syntactically correct) but could not be processed.[1]: §15.5.21
- 423 Locked (WebDAV; RFC 4918)
- The resource that is being accessed is locked.[7]
- 424 Failed Dependency (WebDAV; RFC 4918)
- The request failed because it depended on another request and that request failed (e.g., a PROPPATCH).[7]
- 425 Too Early (RFC 8470)
- Indicates that the server is unwilling to risk processing a request that might be replayed.
- 426 Upgrade Required
- The client should switch to a different protocol such as TLS/1.3, given in the Upgrade header field.
- 428 Precondition Required (RFC 6585)
- The origin server requires the request to be conditional. Intended to prevent the 'lost update' problem, where a client GETs a resource's state, modifies it, and PUTs it back to the server, when meanwhile a third party has modified the state on the server, leading to a conflict.[25]
- 429 Too Many Requests (RFC 6585)
- The user has sent too many requests in a given amount of time. Intended for use with rate-limiting schemes.[25]
- 431 Request Header Fields Too Large (RFC 6585)
- The server is unwilling to process the request because either an individual header field, or all the header fields collectively, are too large.[25]
- 451 Unavailable For Legal Reasons (RFC 7725)
- A server operator has received a legal demand to deny access to a resource or to a set of resources that includes the requested resource.[26] The code 451 was chosen as a reference to the novel Fahrenheit 451.[27]
5xx server errors
[edit]The server failed to fulfill a request.
Response status codes beginning with the digit "5" indicate cases in which the server is aware that it has encountered an error or is otherwise incapable of performing the request. Except when responding to a HEAD request, the server should include an entity containing an explanation of the error situation, and indicate whether it is a temporary or permanent condition. Likewise, user agents should display any included entity to the user. These response codes are applicable to any request method.
- 500 Internal Server Error
- A generic error message, given when an unexpected condition was encountered and no more specific message is suitable.
- 501 Not Implemented
- The server either does not recognize the request method, or it lacks the ability to fulfil the request. Usually this implies future availability (e.g., a new feature of a web-service API).
- 502 Bad Gateway
- The server was acting as a gateway or proxy and received an invalid response from the upstream server.
- 503 Service Unavailable
- The server cannot handle the request (because it is overloaded or down for maintenance). Generally, this is a temporary state.[28]
- 504 Gateway Timeout
- The server was acting as a gateway or proxy and did not receive a timely response from the upstream server.
- 505 HTTP Version Not Supported
- The server does not support the HTTP version used in the request.
- 506 Variant Also Negotiates (RFC 2295)
- Transparent content negotiation for the request results in a circular reference.[29]
- 507 Insufficient Storage (WebDAV; RFC 4918)
- The server is unable to store the representation needed to complete the request.[7]
- 508 Loop Detected (WebDAV; RFC 5842)
- The server detected an infinite loop while processing the request (sent instead of 208 Already Reported).
- 510 Not Extended (RFC 2774)
- Further extensions to the request are required for the server to fulfil it.[30]
- 511 Network Authentication Required (RFC 6585)
- The client needs to authenticate to gain network access. Intended for use by intercepting proxies used to control access to the network (e.g., "captive portals" used to require agreement to Terms of Service before granting full Internet access via a Wi-Fi hotspot).[25]
Nonstandard codes
[edit]The following codes are not specified by any standard.
- 218 This is fine (Apache HTTP Server)
- Used by Apache servers. A catch-all error condition allowing the passage of message bodies through the server when the
ProxyErrorOverridesetting is enabled. It is displayed in this situation instead of a 4xx or 5xx error message.[31] - 419 Page Expired (Laravel Framework)
- Used by the Laravel Framework when a CSRF Token is missing or expired.[32]
- 420 Method Failure (Spring Framework)
- A deprecated response status proposed during the development of WebDAV[33] used by the Spring Framework when a method has failed.[34]
- 420 Enhance Your Calm (Twitter)
- Returned by version 1 of the Twitter Search and Trends API when the client is being rate limited; versions 1.1 and later use the 429 Too Many Requests response code instead.[35] The phrase "Enhance your calm" comes from the 1993 movie Demolition Man, and its association with this number is likely a reference to cannabis.[citation needed]
- 430 Request Header Fields Too Large (Shopify)
- A deprecated response used by Shopify, instead of the 429 Too Many Requests response code, when too many URLs are requested within a certain time frame.[36]
- 430 Shopify Security Rejection (Shopify)
- Used by Shopify to signal that the request was deemed malicious.[37]
- 450 Blocked by Windows Parental Controls (Microsoft)
- The Microsoft extension code indicated when Windows Parental Controls are turned on and are blocking access to the requested webpage.[38]
- 498 Invalid Token (Esri)
- Returned by ArcGIS Server. Code 498 indicates an expired or otherwise invalid token.[39]
- 499 Token Required (Esri)
- Returned by ArcGIS Server. Code 499 indicates that a token is required but was not submitted.[39]
- 508 Resource Limit Is Reached (cPanel)
- Used instead of 503 when the server's account has exceeded the resources assigned to it, such as CPU/RAM usage or number of concurrent processes.[40]
- 509 Bandwidth Limit Exceeded (Apache Web Server/cPanel)
- The server has exceeded the bandwidth specified by the server administrator; this is often used by shared hosting providers to limit the bandwidth of customers.[41]
- 525 SSL handshake failed (Cloudflare)
- This error indicates that the SSL handshake between Cloudflare and the origin web server failed.[42]
- 526 Invalid SSL certificate (Cloudflare)
- This error indicates that Cloudflare is unable to verify the SSL certificate on the origin server, preventing a secure connection from being established.[43]
- 529 Site is overloaded
- Used by Qualys in the SSLLabs server testing API to signal that the site can not process the request.[44]
- 530 Site is frozen
- Used by the Pantheon Systems web platform to indicate a site that has been frozen due to inactivity.[45]
- 530 Origin DNS Error (Shopify)
- Used by Shopify to indicate that Cloudflare can't resolve the requested DNS record.[37]
- 530 Origin Unavailable (Cloudflare)
- Used by Cloudflare to indicate that it is unable to resolve the origin hostname, preventing it from establishing a connection to the origin server.[46]
- 540 Temporarily Disabled (Shopify)
- Used by Shopify to indicate that the requested endpoint has been temporarily disabled.[37]
- 598 (Informal convention) Network read timeout error
- Used by some HTTP proxies to signal a network read timeout behind the proxy to a client in front of the proxy.[47]
- 599 Network Connect Timeout Error
- An error used by some HTTP proxies to signal a network connect timeout behind the proxy to a client in front of the proxy.
- 783 Unexpected Token (Shopify)
- Used by Shopify to indicate that the request includes a JSON syntax error.[37]
- 999 Non-standard
- Error 999 is used by LinkedIn and is related to being blocked/walled or unable to access their webpages without first signing in.[48]
Internet Information Services
[edit]Microsoft's Internet Information Services (IIS) web server expands the 4xx error space to signal errors with the client's request.
- 440 Login Time-out
- The client's session has expired and must log in again.[49]
- 449 Retry With
- The server cannot honour the request because the user has not provided the required information.[50]
- 451 Redirect
- Used in Exchange ActiveSync when either a more efficient server is available or the server cannot access the users' mailbox.[51] The client is expected to re-run the HTTP AutoDiscover operation to find a more appropriate server.[52]
IIS sometimes uses additional decimal sub-codes for more specific information,[53] however these sub-codes only appear in the response payload and in documentation, not in the place of an actual HTTP status code.
nginx
[edit]The nginx web server software expands the 4xx error space to signal issues with the client's request.[54][55]
- 444 No Response
- Used internally[56] to instruct the server to return no information to the client and close the connection immediately.
- 494 Request header too large
- Client sent too large request or too long header line.
- 495 SSL Certificate Error
- An expansion of the 400 Bad Request response code, used when the client has provided an invalid client certificate.
- 496 SSL Certificate Required
- An expansion of the 400 Bad Request response code, used when a client certificate is required but not provided.
- 497 HTTP Request Sent to HTTPS Port
- An expansion of the 400 Bad Request response code, used when the client has made a HTTP request to a port listening for HTTPS requests.
- 499 Client Closed Request
- Used when the client has closed the request before the server could send a response.
Cloudflare
[edit]Cloudflare's reverse proxy service expands the 5xx series of errors space to signal issues with the origin server.[57]
- 520 Web Server Returned an Unknown Error
- The origin server returned an empty, unknown, or unexpected response to Cloudflare.[58]
- 521 Web Server Is Down
- The origin server refused connections from Cloudflare. Security solutions at the origin may be blocking legitimate connections from certain Cloudflare IP addresses.[59]
- 522 Connection Timed Out
- Cloudflare timed out contacting the origin server.[60]
- 523 Origin Is Unreachable
- Cloudflare could not contact the origin server.[61]
- 524 A Timeout Occurred
- Cloudflare was able to complete a TCP connection to the origin server, but the origin did not provide a timely HTTP response.[62]
- 525 SSL Handshake Failed
- Cloudflare could not negotiate a SSL/TLS handshake with the origin server.[63]
- 526 Invalid SSL Certificate
- Cloudflare could not validate the SSL certificate on the origin web server.[64] Also used by Cloud Foundry's gorouter.
- 527 Railgun Error (obsolete)
- Error 527 indicated an interrupted connection between Cloudflare and the origin server's Railgun server.[65] This error is obsolete as Cloudflare has deprecated Railgun.
- 530
- Cloudflare was unable to resolve the origin hostname, preventing it from establishing a connection to the origin server. The body of the response contains an 1xxx error.[66]
AWS Elastic Load Balancing
[edit]Amazon Web Services' Elastic Load Balancing adds a few custom return codes to signal issues either with the client request or with the origin server.[67]
- 000
- Returned with an HTTP/2 GOAWAY frame if the compressed length of any of the headers exceeds 8K bytes or if more than 10K requests are served through one connection.[67]
- 460
- Client closed the connection with the load balancer before the idle timeout period elapsed. Typically, when client timeout is sooner than the Elastic Load Balancer's timeout.[67]
- 463
- The load balancer received an X-Forwarded-For request header with more than 30 IP addresses.[67]
- 464
- Incompatible protocol versions between Client and Origin server.[67]
- 561 Unauthorized
- An error around authentication returned by a server registered with a load balancer. A listener rule is configured to authenticate users, but the identity provider (IdP) returned an error code when authenticating the user.[67]
Caching warning codes (obsoleted)
[edit]The following caching related warning codes were specified under RFC 7234. Unlike the other status codes above, these were not sent as the response status in the HTTP protocol, but as part of the "Warning" HTTP header.[68][69]
Since this "Warning" header is often neither sent by servers nor acknowledged by clients, this header and its codes were obsoleted by the HTTP Working Group in 2022 with RFC 9111.[70]
- 110 Response is Stale
- The response provided by a cache is stale (the content's age exceeds a maximum age set by a Cache-Control header or heuristically chosen lifetime).
- 111 Revalidation Failed
- The cache was unable to validate the response, due to an inability to reach the origin server.
- 112 Disconnected Operation
- The cache is intentionally disconnected from the rest of the network.
- 113 Heuristic Expiration
- The cache heuristically chose a freshness lifetime greater than 24 hours and the response's age is greater than 24 hours.
- 199 Miscellaneous Warning
- Arbitrary, non-specific warning. The warning text may be logged or presented to the user.
- 214 Transformation Applied
- Added by a proxy if it applies any transformation to the representation, such as changing the content encoding, media type or the like.
- 299 Miscellaneous Persistent Warning
- Same as 199, but indicating a persistent warning.
See also
[edit]Notes
[edit]References
[edit]- ^ a b c d e f g R. Fielding; M. Nottingham; J. Reschke, eds. (June 2022). HTTP Semantics. Internet Engineering Task Force. doi:10.17487/RFC9110. ISSN 2070-1721. STD 97. RFC 9110. Internet Standard 97. Obsoletes RFC 2818, 7230, 7231, 7232, 7233, 7235, 7538, 7615 and 7694. Updates RFC 3864.
- ^ a b c "Hypertext Transfer Protocol (HTTP) Status Code Registry". Iana.org. Archived from the original on December 11, 2011. Retrieved January 8, 2015.
- ^ Goland, Yaronn; Whitehead, Jim; Faizi, Asad; Carter, Steve R.; Jensen, Del (February 1999). HTTP Extensions for Distributed Authoring – WEBDAV. Network Working Group. doi:10.17487/RFC2518. RFC 2518. Proposed Standard. Obsoleted by RFC 4918.
- ^ "102 Processing – HTTP MDN". July 25, 2023. 102 status code is deprecated
- ^ Oku, Kazuho (December 2017). An HTTP Status Code for Indicating Hints. Internet Engineering Task Force. doi:10.17487/RFC8297. RFC 8297. Experimental.
- ^ Stewart, Mark; djna. "Create request with POST, which response codes 200 or 201 and content". Stack Overflow. Archived from the original on October 11, 2016. Retrieved October 16, 2015.
- ^ a b c d Dusseault, Lisa, ed. (June 2007). HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV). Network Working Group. doi:10.17487/RFC4918. RFC 4918. Proposed Standard. Updated by RFC 5689. Obsoletes RFC 2518.
- ^ Hoff, Arthur van; Douglis, Fred; Krishnamurthy, Balachander; Goland, Yaron Y.; Hellerstein, Daniel M.; Feldmann, Anja; Mogul, Jeffrey (January 2002). Delta encoding in HTTP. Network Working Group. doi:10.17487/RFC3229. RFC 3229. Proposed Standard.
- ^ T Berners-Lee; R. Fielding; H. Frystyk (May 1996). Hypertext Transfer Protocol -- HTTP/1.0. Network Working Group. doi:10.17487/RFC1945. RFC 1945. Informational.
- ^ "Mozilla Bugzilla Bug 187996: Strange behavior on 305 redirect, comment 13". March 3, 2003. Archived from the original on April 21, 2014. Retrieved May 21, 2009.
- ^ "The GNU Taler tutorial for PHP Web shop developers 0.4.0". docs.taler.net. Archived from the original on November 8, 2017. Retrieved October 29, 2017.
- ^ "Google API Standard Error Responses". 2016. Archived from the original on May 25, 2017. Retrieved June 21, 2017.
- ^ "Sipgate API Documentation". Archived from the original on July 10, 2018. Retrieved July 10, 2018.
- ^ "Shopify Documentation". Archived from the original on July 25, 2018. Retrieved July 25, 2018.
- ^ "Stripe API Reference – Errors". stripe.com. Retrieved October 28, 2019.
- ^ "409 Conflict". MDN Web Docs. March 13, 2025. Retrieved June 11, 2025.
- ^ a b c R. Fielding; J. Gettys; J. Mogul; H. Frystyk; L. Masinter; P. Leach; T. Berners-Lee (August 1999). Hypertext Transfer Protocol -- HTTP/1.1. Network Working Group. doi:10.17487/RFC2616. RFC 2616. Obsolete. Obsoleted by RFC 7230, 7231, 7232, 7233, 7234 and 7235. Obsoletes RFC 2068. Updated by RFC 2817, 5785, 6266 and 6585.
- ^ TheDeadLike. "HTTP/1.1 Status Codes 400 and 417, cannot choose which". serverFault. Archived from the original on October 10, 2015. Retrieved October 16, 2015.
- ^ L. Masinter (April 1, 1998). Hyper Text Coffee Pot Control Protocol (HTCPCP/1.0). Network Working Group. doi:10.17487/RFC2324. RFC 2324. Informational. Updated by RFC 7168. This is an April Fools' Day Request for Comments.
Any attempt to brew coffee with a teapot should result in the error code "418 I'm a teapot". The resulting entity body MAY be short and stout.
- ^ I'm a teapot
- ^ Barry Schwartz (August 26, 2014). "New Google Easter Egg For SEO Geeks: Server Status 418, I'm A Teapot". Search Engine Land. Archived from the original on November 15, 2015. Retrieved November 4, 2015.
- ^ "Google's Teapot". Retrieved October 23, 2017.
- ^ "Enable extra web security on a website". DreamHost. Retrieved December 18, 2022.
- ^ "I Went to a Russian Website and All I Got Was This Lousy Teapot". PCMag. February 25, 2022. Retrieved December 18, 2022.
- ^ a b c d M. Nottingham; R. Fielding (April 2012). Additional HTTP Status Codes. Internet Engineering Task Force. doi:10.17487/RFC6585. ISSN 2070-1721. RFC 6585. Proposed Standard. Updates RFC 2616.
- ^ Bray, T. (February 2016). "An HTTP Status Code to Report Legal Obstacles". ietf.org. Archived from the original on March 4, 2016. Retrieved March 7, 2015.
- ^ Paul, Ian (December 21, 2015). "Error 451 is the new Ray Bradbury-inspired HTTP code for online censorship". PC World. Retrieved July 18, 2025.
- ^ alex. "What is the correct HTTP status code to send when a site is down for maintenance?". Stack Overflow. Archived from the original on October 11, 2016. Retrieved October 16, 2015.
- ^ K. Holtman; A.H. Mutz (March 1998). Transparent Content Negotiation in HTTP. Network Working Group. doi:10.17487/RFC2295. RFC 2295. Experimental.
- ^ Nielsen, Henrik Frystyk; Leach, Paul; Lawrence, Scott (February 2000). An HTTP Extension Framework. Network Working Group. doi:10.17487/RFC2774. RFC 2774. Historic.
- ^ "218 This is fine – HTTP status code explained". HTTP.dev. Retrieved July 25, 2023.
- ^ "framework/src/Illuminate/Foundation/Exceptions/Handler.php". GitHub. Retrieved December 12, 2023.
- ^ "draft-ietf-webdav-protocol-05: Extensions for Distributed Authoring on the World Wide Web -- WEBDAV".
- ^ "Enum HttpStatus". Spring Framework. org.springframework.http. Archived from the original on October 25, 2015. Retrieved October 16, 2015.
- ^ "Twitter Error Codes & Responses". Twitter. 2014. Archived from the original on September 27, 2017. Retrieved January 20, 2014.
- ^ "HTTP Status Codes and SEO: what you need to know". ContentKing. Retrieved August 9, 2019.
- ^ a b c d "Shopify API response status and error codes". Retrieved December 12, 2023.
- ^ "Screenshot of error page". Archived from the original (bmp) on May 11, 2013. Retrieved October 11, 2009.
- ^ a b "Using token-based authentication". ArcGIS Server SOAP SDK. Archived from the original on September 26, 2014. Retrieved September 8, 2014.
- ^ "Receiving a "508 Resource Limit Is Reached" error when browsing a site on CloudLinux". September 28, 2021. Archived from the original on July 19, 2025. Retrieved July 19, 2025.
- ^ "HTTP Error Codes and Quick Fixes". Docs.cpanel.net. Archived from the original on November 23, 2015. Retrieved October 15, 2015.
- ^ "Cloudflare support docs". developers.cloudflare.com. April 29, 2025. Retrieved September 14, 2025.
- ^ "Cloudflare support docs". developers.cloudflare.com. August 11, 2025. Retrieved September 14, 2025.
- ^ "SSL Labs API v3 Documentation". github.com.
- ^ "Platform Considerations | Pantheon Docs". pantheon.io. Archived from the original on January 6, 2017. Retrieved January 5, 2017.
- ^ "Cloudflare support docs". developers.cloudflare.com. April 29, 2025. Retrieved September 14, 2025.
- ^ "HTTP status codes – ascii-code.com". www.ascii-code.com. Archived from the original on January 7, 2017. Retrieved December 23, 2016.
- ^ Seen in 2017 + 2024 example
- ^ "Error message when you try to log on to Exchange 2007 by using Outlook Web Access: "440 Login Time-out"". Microsoft. 2010. Retrieved November 13, 2013.
- ^ "2.2.6 449 Retry With Status Code". Microsoft. 2009. Archived from the original on October 5, 2009. Retrieved October 26, 2009.
- ^ "MS-ASCMD, Section 3.1.5.2.2". Msdn.microsoft.com. Archived from the original on March 26, 2015. Retrieved January 8, 2015.
- ^ "Ms-oxdisco". Msdn.microsoft.com. Archived from the original on July 31, 2014. Retrieved January 8, 2015.
- ^ "The HTTP status codes in IIS 7.0". Microsoft. July 14, 2009. Archived from the original on April 9, 2009. Retrieved April 1, 2009.
- ^ "ngx_http_request.h". nginx 1.9.5 source code. nginx inc. Archived from the original on September 19, 2017. Retrieved January 9, 2016.
- ^ "ngx_http_special_response.c". nginx 1.9.5 source code. nginx inc. Archived from the original on May 8, 2018. Retrieved January 9, 2016.
- ^ "return" directive Archived March 1, 2018, at the Wayback Machine (http_rewrite module) documentation.
- ^ "Troubleshooting: Error Pages". Cloudflare. Archived from the original on March 4, 2016. Retrieved January 9, 2016.
- ^ "Error 520: web server returns an unknown error". Cloudflare. May 29, 2025.
- ^ "Error 521: web server is down". Cloudflare. April 29, 2025.
- ^ "Error 522: connection timed out". Cloudflare. May 5, 2025.
- ^ "Error 523: origin is unreachable". Cloudflare. April 29, 2025.
- ^ "Error 524: a timeout occurred". Cloudflare. August 6, 2025.
- ^ "Error 525: SSL handshake failed". Cloudflare. April 29, 2025.
- ^ "Error 526: invalid SSL certificate". Cloudflare. August 11, 2025.
- ^ "527 Error: Railgun Listener to origin error". Cloudflare. Archived from the original on October 13, 2016. Retrieved October 12, 2016.
- ^ "Error 530". Cloudflare. Retrieved November 1, 2019.
- ^ a b c d e f "Troubleshoot Your Application Load Balancers – Elastic Load Balancing". docs.aws.amazon.com. Retrieved May 17, 2023.
- ^ R. Fielding; M. Nottingham; J. Reschke (June 2014). Hypertext Transfer Protocol (HTTP/1.1): Caching. Internet Engineering Task Force. doi:10.17487/RFC7234. RFC 7234. Obsolete. sec. 5.5. Obsoleted by RFC 9111. Obsoletes RFC 2616.
- ^ "Warning – HTTP | MDN". developer.mozilla.org. Retrieved August 15, 2021.
This article incorporates text available under the CC BY-SA 2.5 license.
- ^ "Warning". HTTP Caching. June 2022. sec. 5.5. doi:10.17487/RFC9111. RFC 9111.
External links
[edit]- Hypertext Transfer Protocol (HTTP) Status Code Registry at the Internet Assigned Numbers Authority
- MDN status code reference at mozilla.org
List of HTTP status codes
View on GrokipediaIntroduction
Definition and Purpose
HTTP status codes are three-digit integers returned by servers in response to client requests within the Hypertext Transfer Protocol (HTTP), serving as a mechanism to indicate the outcome of the request's processing on the server side. These codes enable servers to communicate concise, standardized feedback to clients, such as web browsers or API consumers, about whether a request succeeded, failed, requires further action, or encountered an error. The primary purpose of HTTP status codes is to provide machine-readable indicators that allow clients to interpret responses programmatically and take appropriate actions, such as retrying a request upon transient failure, following a redirect to a new resource, or displaying an error message to the user. This feedback loop is essential for the stateless nature of HTTP, ensuring reliable and efficient web communication without relying on verbose textual explanations. For instance, a client might automatically handle a temporary server overload by rescheduling the request, thereby improving overall system resilience. Historically, HTTP status codes were first formalized in HTTP/1.0 as outlined in RFC 1945, published by the Internet Engineering Task Force (IETF) in May 1996, which introduced a basic set of codes to support early web interactions. The framework evolved significantly with HTTP/1.1 in RFC 9110 (June 2022), which refined and expanded the semantics while maintaining backward compatibility, and has been preserved in subsequent versions including HTTP/2 (RFC 7540, May 2015) and HTTP/3 (RFC 9114, June 2022), adapting to modern transport protocols like QUIC without altering the core status code system. The IANA maintains the official registry of these codes, ensuring global consistency and preventing conflicts in assignments.[2] Standardized by the IETF through its Request for Comments (RFC) series, HTTP status codes number 63 in the official registry as of September 2025, reflecting ongoing refinements to address emerging web needs while preserving interoperability.[2] These codes are classified into five categories based on their first digit—1xx for informational, 2xx for success, 3xx for redirection, 4xx for client errors, and 5xx for server errors—facilitating quick interpretation by both humans and machines.Format and Classification
HTTP status codes are structured as three-digit integers, denoted in the format ABC, where the first digit A represents the response class (ranging from 1 to 5), the second digit B indicates a subcategory within that class, and the third digit C provides additional specificity to the status.[3] These codes are transmitted by servers in the response's Status-Line header field, formatted as "HTTP/version status-code SP reason-phrase", such as "HTTP/1.1 200 OK", where the version specifies the HTTP protocol version, the status code is the three-digit value, and the reason-phrase is an optional human-readable description.[3] The classification system organizes these codes into five primary classes based on the first digit, ensuring predictable behavior for clients across different HTTP implementations: 1xx codes denote informational or provisional responses, indicating that the request is being processed; 2xx codes signal successful completion of the client's request; 3xx codes represent redirection, prompting the client to take further action; 4xx codes indicate client errors, such as malformed requests or unauthorized access; and 5xx codes signify server errors, where the server failed to fulfill a valid request.[3] The HTTP specifications define five classes of status codes (1xx to 5xx); no 0xx or 6xx classes are defined to maintain compatibility with the established structure.[3] Registration of HTTP status codes is managed through the Internet Assigned Numbers Authority (IANA), which maintains the official Hypertext Transfer Protocol (HTTP) Status Code Registry to prevent conflicts and ensure standardization.[4] Provisional or experimental codes require review by the Internet Engineering Task Force (IETF) before temporary assignment, while permanent codes must be defined in a Standards Track Request for Comments (RFC) document approved by the IETF to guarantee interoperability.[5] As of November 2025, the IANA registry lists over 60 registered status codes, with the class-based system promoting consistent handling and interpretation across HTTP versions from 1.0 to 3.0.[4][6]Standard Status Codes
1xx: Informational Responses
The 1xx status codes are informational responses that provide provisional feedback to the client, indicating that the server has received the request and is continuing to process it without yet providing a final outcome. These codes facilitate efficient communication, particularly in scenarios involving large payloads or protocol negotiations, by allowing clients to confirm server readiness before proceeding with resource-intensive actions. Unlike final status codes, 1xx responses do not complete the request; clients must await a subsequent final response to determine success or failure.[7] 100 ContinueThe 100 Continue status code signals that the server has received the request headers and has not rejected them, prompting the client to send the request body if it has not already done so. This mechanism is especially valuable for requests with large bodies, such as file uploads, where the client includes an
Expect: 100-continue header to query server acceptance before transmitting the payload, thereby avoiding unnecessary bandwidth usage if the request would otherwise be denied (e.g., due to authentication issues). Servers must respond promptly with 100 Continue if the headers are valid and a body is expected, though this does not guarantee ultimate acceptance of the full request.[8]
101 Switching ProtocolsThe 101 Switching Protocols status code indicates that the server agrees to the client's request to upgrade the protocol, as specified in the
Upgrade request header, enabling a seamless transition on the existing connection. For instance, this is commonly used to switch from HTTP/1.1 to WebSocket for real-time bidirectional communication, where the client sends Upgrade: websocket and the server confirms with Upgrade: websocket in its 101 response, after which the connection adopts the new protocol. The upgrade applies only to the current connection and requires the server to honor the requested protocol if it responds affirmatively.[9]
102 ProcessingIntroduced for WebDAV extensions, the 102 Processing status code informs the client that the server has accepted the request and is actively processing it, though a final response is not yet available. This is particularly useful for lengthy operations, such as those involving resource locking or depth-limited queries in distributed authoring environments, where it prevents premature client timeouts by signaling ongoing activity (e.g., for requests expected to exceed 20 seconds). The server must eventually send a final status code upon completion, and clients should not interpret 102 as an indication of imminent success.[10] 103 Early Hints
The 103 Early Hints status code allows the server to send preliminary header fields to the client before the final response, enabling optimizations such as resource preloading to reduce perceived latency. For example, a server might include
Link headers with rel=preload directives (e.g., Link: </style.css>; rel=preload; as=style) to prompt the client to fetch critical assets like stylesheets or scripts in advance. Multiple 103 responses may be sent with evolving headers, but clients should treat them speculatively and discard any hints that conflict with the eventual final response.[11]
104 Upload Resumption SupportedAs a provisional status code, 104 Upload Resumption Supported indicates that the server can handle resumable uploads, typically sent during the initial creation of an upload resource to inform the client of this capability via a
Location header pointing to the upload endpoint. This enables clients to resume interrupted transfers by querying the current offset (e.g., via Upload-Offset in subsequent responses) and appending the remaining data, which is beneficial for unreliable networks or large files prone to disruptions. Registered temporarily on November 13, 2024, extended on September 15, 2025, with an expiration on November 13, 2026, its use is optional and tied to emerging HTTP extensions for robust upload handling.[12]
In practice, 1xx responses are infrequently used outside specialized contexts like long-running requests or protocol upgrades, as most HTTP interactions complete without interim signaling; clients must not assume request completion based on a 1xx code alone and should always await the final response.[7]
2xx: Successful Responses
The 2xx class of status codes indicates that a client's request was successfully received, understood, and accepted by the server, signifying the completion of the requested action without errors.[13] These responses confirm successful outcomes for various HTTP methods, such as retrieving, creating, or modifying resources, and they often include representation data or metadata in the payload unless specified otherwise.[13] Caching directives, such as those defined in related standards, frequently apply to 2xx responses to optimize performance and reduce unnecessary requests.[13] The specific codes within this range provide nuanced feedback on the nature of the success:| Code | Name | Description |
|---|---|---|
| 200 | OK | This status code signifies that the request has succeeded, with the response typically enclosing a representation of the target resource or results of the action, depending on the method (e.g., full content for GET requests). For methods like PUT or DELETE, the payload may include status information, an updated resource representation, or details about the completed operation. It is commonly used for successful reports or status inquiries, such as OPTIONS requests.[14] |
| 201 | Created | Returned when a request (e.g., POST or PUT) has been fulfilled by creating one or more new resources, often accompanied by a Location header field identifying the primary resource's URI. The response payload usually describes or embeds the new resource(s), and an ETag header may indicate the entity's current tag; caches must not store the response without appropriate validators to prevent sharing unintended resources.[15] |
| 202 | Accepted | This code indicates that the request has been accepted for processing, but the action is not yet complete—suitable for asynchronous operations like batch jobs. The response may include a representation describing the current status and possibly linking to a monitor for progress updates, without committing to eventual fulfillment.[16] |
| 203 | Non-Authoritative Information | Used by proxies or gateways to signal successful processing where the response payload has been modified from the origin server's original (e.g., transformations applied), ensuring clients understand potential differences in the data. Origin servers must not generate this code, and it remains cacheable unless overridden by method or cache controls.[17] |
| 204 | No Content | Indicates successful fulfillment of the request with no additional content in the response body, often for updates like PUT or DELETE where metadata (e.g., ETag for the updated resource) suffices. The response ends immediately after headers and is cacheable by default, referring to the target resource's post-action state. It is commonly used for tracking endpoints, such as invisible links or beacons in analytics systems (e.g., Google Analytics), where the server logs the request (e.g., a click) without returning any content to the client.[18][19] |
| 205 | Reset Content | Signals successful request fulfillment and instructs the user agent to reset the document view (e.g., clearing a form) to its original or default state, supporting data entry scenarios without sending a response body. This code terminates after the headers and is rarely used in modern applications.[20] |
| 206 | Partial Content | Denotes successful delivery of a partial representation of the target resource in response to a range request (e.g., byte-range for resumable downloads), requiring a Content-Range header to specify the included portions. The payload must not exceed the requested ranges, and invalid ranges trigger a 416 error instead. Defined in RFC 7233 and integrated into core semantics.[21] |
| 207 | Multi-Status | The 207 Multi-Status status code provides status for multiple independent operations, typically in WebDAV contexts where a single request affects multiple resources; the response body is an XML message containing separate status codes for each operation.[22] |
| 208 | Already Reported | Used within a 207 Multi-Status response in WebDAV to indicate that the members of a DAV binding have already been enumerated in a previous reply, avoiding duplication and potential XML element conflicts.[23] |
| 226 | IM Used | Indicates that the server has fulfilled a GET request for the resource, and the response is a representation of the result of one or more instance-manipulations applied to the current instance, using delta encoding to fulfill the request.[24] |
3xx: Redirection Messages
The 3xx class of HTTP status codes indicates that further action is required by the client to complete the request, typically involving redirection to a different URI provided in the response.[25] These codes facilitate resource relocation without implying an error, distinguishing them from 2xx successful responses, which deliver the requested content directly, and from 4xx client errors, which signal invalid requests.[3] Clients are generally expected to follow these redirects automatically, but implementations must limit the number of redirections to prevent infinite loops, often capping at around 5-10 iterations depending on the user agent.[25] Most 3xx responses (except 304) require aLocation header field containing the target URI, which may be absolute or relative.[26]
300 Multiple Choices signals that the requested resource has multiple representations or equivalents, such as different formats or languages, and the client or user must select one.[27] The server may include a Location header suggesting a preferred choice, but the response body can list options for user selection, often used in content negotiation scenarios.[28] Unlike other redirects, this code does not imply relocation but rather choice among alternatives.[27]
301 Moved Permanently indicates that the resource has been assigned a new permanent URI, and clients should update references, such as bookmarks or caches, to use the new location for all future requests.[29] The Location header provides the new URI, and user agents with editing capabilities are expected to automatically adjust links.[29] This code allows the original request method to change to GET if it was POST, though modern practices recommend preserving methods where possible.[29]
302 Found, also known as Moved Temporarily in some contexts, denotes that the resource is temporarily available at a different URI, but the original URI should remain the preferred reference for future requests.[30] It requires a Location header, and like 301, it may result in changing a POST method to GET upon redirection, which can lead to unintended data loss in form submissions.[30] This status is commonly used for short-term redirects, such as maintenance pages.[30]
303 See Other directs the client to retrieve the response from a different URI, typically after a state-changing operation like POST, to prevent accidental resubmission of the request upon refresh.[31] The Location header specifies the URI, and clients must follow it with a GET method, regardless of the original request method; the response body from the 303 itself is not forwarded.[31] This code ensures safe navigation post-submission without implying any movement of the original resource.[31]
304 Not Modified responds to a conditional request (using headers like If-Modified-Since or If-None-Match) when the resource has not changed since the specified date or entity tag, allowing the client to use its cached version without sending the body.[32] No Location header is required, and the response includes relevant cache-control headers to maintain consistency.[32] This code optimizes bandwidth by leveraging caching mechanisms outlined in successful response handling.[33]
305 Use Proxy indicates that the requested resource must be accessed through the proxy given by the Location field; it is deprecated and rarely used due to security concerns with non-HTTPS proxies.[34]
306 (Unused) was originally defined for subsequent requests to use the specified proxy but is no longer used and must not be sent.[35]
307 Temporary Redirect behaves like 302 but mandates that the client preserve the original request method and body when following the redirect, making it safer for non-GET requests like POST.[36] The Location header provides the temporary URI, and clients must not change the method, ensuring idempotence where applicable.[36] Introduced to address ambiguities in earlier temporary redirects, it is widely supported in modern user agents.[36]
308 Permanent Redirect, defined in RFC 7238, mirrors 301 but requires preservation of the original request method and body, preventing unintended method changes during permanent relocations.[37] The Location header specifies the new permanent URI, and clients should update future references accordingly while maintaining the request semantics.[37] This code ensures reliable handling of non-GET methods in permanent scenarios, such as API endpoint migrations.[37]
4xx: Client Errors
The 4xx class of status codes indicates that the client seems to have made an error in its request, such as bad syntax, invalid parameters, or authentication issues, preventing the server from processing it. These codes signal problems originating from the client side, in contrast to 5xx server errors that reflect server-side failures. Unlike 3xx redirection messages, which instruct the client to follow a new URI for the resource, 4xx codes require the client to correct the request before retrying, as automatic resubmission without modification may result in persistent failure. Servers sending 4xx responses should include a descriptive reason phrase and may provide additional details in the response body, though clients must not rely on specific formats beyond the code itself. Common resolutions involve inspecting request syntax, headers, and body for errors, then resending a corrected version; for example, validating JSON payloads or adding missing authentication credentials. The following enumerates the standard 4xx codes, including their definitions, typical causes, associated headers, and guidance for resolution.| Code | Description | Common Causes | Relevant Headers | Resolution |
|---|---|---|---|---|
| 400 Bad Request | The server cannot or will not process the request due to a perceived client error, such as malformed syntax or invalid message framing.[38] | Invalid parameters, like malformed JSON in the request body, or deceptive request routing.[38] | None specified. | Examine and correct request syntax or parameters, such as ensuring valid JSON structure, then retry.[38] |
| 401 Unauthorized | The request lacks valid authentication credentials for the target resource, requiring the client to authenticate.[39] | Missing or invalid credentials, such as an absent or expired token.[39] | WWW-Authenticate (indicates authentication schemes and parameters).[39] | Provide valid credentials via the specified scheme (e.g., Basic or Bearer) and retry.[39] |
| 402 Payment Required | Reserved for future use, potentially for scenarios like digital payment requirements in APIs.[40] | Not currently defined or implemented in practice; rarely used.[40] | None specified. | Implement payment or subscription as per service requirements, though actual usage remains limited.[40] |
| 403 Forbidden | The server understands the request but refuses to authorize it, often due to insufficient permissions.[41] | Access denied despite valid authentication, such as role-based restrictions.[41] | None specified. | Verify and elevate user permissions or contact the resource owner; do not retry without changes.[41] |
| 404 Not Found | The origin server did not find a current representation for the target resource at the given URI.[42] | The resource does not exist, has been moved without redirection, or the URI is incorrect.[42] | None specified. | Check the URI for typos or confirm resource availability; consider alternatives like search endpoints.[42] |
| 405 Method Not Allowed | The method specified in the request is known by the server but not supported for the target resource.[43] | Attempting an unsupported HTTP method, such as PUT on a read-only resource.[43] | Allow (lists supported methods).[43] | Switch to an allowed method from the Allow header and retry.[43] |
| 406 Not Acceptable | The target resource lacks a representation that conforms to the client's specified preferences.[44] | Mismatch in Accept headers, such as requesting an unsupported content type or language.[44] | Vary (indicates varying factors like Accept).[44] | Adjust Accept headers to match available representations or broaden preferences, then retry.[44] |
| 407 Proxy Authentication Required | The client must first authenticate itself with the proxy server.[45] | Missing or invalid proxy credentials in a proxied environment.[45] | Proxy-Authenticate (authentication schemes for proxy); Proxy-Authorization (client credentials).[45] | Supply proxy credentials via Proxy-Authorization and retry.[45] |
| 408 Request Timeout | The server timed out waiting for the complete request message from the client.[46] | The client took too long to send the request, often due to network delays or large payloads.[46] | None specified. | Reduce request size, improve connection speed, or resend promptly.[46] |
| 409 Conflict | The request could not be completed due to a conflict with the current state of the target resource.[47] | State mismatch, such as version conflicts during concurrent updates.[47] | None specified. | Resolve the conflict by updating based on the current resource state (e.g., via ETag) and retry.[47] |
| 410 Gone | Access to the target resource is no longer available at the origin server and this condition is permanent.[48] | The resource has been permanently deleted or archived with no forwarding address.[48] | None specified. | Cease requests to this URI; seek an alternative resource or archive.[48] |
| 411 Length Required | The server refuses to accept the request without a defined Content-Length header.[49] | Missing Content-Length for methods expecting a body, like POST.[49] | Content-Length (required for body size).[49] | Include a valid Content-Length header matching the body size and retry.[49] |
| 412 Precondition Failed | One or more conditions given in the request header fields evaluated to false when tested on the server.[50] | Preconditions like If-Match or If-Unmodified-Since not satisfied, often in optimistic concurrency.[50] | ETag, If-Match (for entity validation).[50] | Update preconditions with current resource metadata (e.g., fresh ETag) and retry.[50] |
| 413 Content Too Large | The server refuses to process the request because the request payload exceeds what it is willing or able to handle (formerly known as Payload Too Large).[51] | Request body size surpasses server limits, such as upload quotas.[51] | Content-Length (indicates oversized payload). | Reduce the payload size or split into multiple requests, then retry.[51] |
| 414 URI Too Long | The server refuses to service the request because the target URI is longer than it is willing to interpret.[52] | Excessively long URI, often from nested query parameters.[52] | None specified. | Shorten the URI by simplifying queries or using POST for data, then retry.[52] |
| 415 Unsupported Media Type | The origin server refuses to service the request because the payload is in a format not supported by the target resource for the requested method.[53] | Incompatible Content-Type, such as sending XML to a JSON-only endpoint.[53] | Content-Type (request body format); Accept (preferred formats).[53] | Change the payload to a supported media type per Accept and retry.[53] |
| 416 Range Not Satisfiable | The range specified in the request cannot be fulfilled, such as due to invalid byte ranges.[54] | Requested range exceeds resource boundaries or is malformed.[54] | Range (request range); Content-Range (response details).[54] | Adjust the Range header to valid bounds based on Content-Range and retry.[54] |
| 417 Expectation Failed | The server refuses the request because the expectation in the Expect header field cannot be met by the server.[55] | Unsupported Expect value, such as 100-continue when the server does not support it.[55] | Expect (client expectations).[55] | Remove or modify the Expect header to a supported value and retry.[55] |
| 421 Misdirected Request | The request was directed at a server unable to produce a response, such as after a misrouted redirect.[56] | Sent to the wrong server instance, common in HTTP/2 multiplexing or load balancing errors.[56] | None specified. | Redirect to the correct server or verify routing configuration, then retry.[56] |
| 422 Unprocessable Content | The server understands the content type and syntax of the request entity but cannot process the contained instructions (from WebDAV, standardized in RFC 9110).[57] | Semantic errors in the body, such as valid JSON with invalid business logic values.[57] | None specified. | Correct semantic issues in the payload, like validation rules, and retry.[57] |
| 423 Locked | The source or destination resource of the method is locked (from WebDAV, RFC 4918).[58] | Attempting to modify a locked resource without the required lock token.[58] | If (with lock token).[59] | Obtain and include the lock token via the If header, or wait for unlock, then retry.[58] |
| 424 Failed Dependency | The method could not be performed on the resource because the requested action depended on another action that failed (from WebDAV, RFC 4918).[60] | A dependent operation, like a multi-step update, failed earlier in the sequence.[60] | None specified. | Address the underlying dependency failure and resubmit the full request.[60] |
| 425 Too Early | The server is unwilling to process the request due to risks like replay attacks from early data (RFC 8470).[61] | Use of early data in TLS 1.3 before full handshake, posing security risks.[61] | Early-Data (indicates early data usage).[62] | Complete the TLS handshake fully before sending the request and retry.[61] |
| 426 Upgrade Required | The server refuses the request using the current protocol but may succeed after the client upgrades.[63] | Outdated protocol version incompatible with the resource.[63] | Upgrade (specifies required protocol).[63] | Upgrade to the protocol in the Upgrade header (e.g., from HTTP/1.1 to HTTP/2) and retry.[63] |
| 428 Precondition Required | The origin server requires the request to be conditional to prevent lost updates (RFC 6585).[64] | Missing conditional headers during concurrent resource modifications.[64] | If-Match (suggested for conditionals).[64] | Add appropriate precondition headers like If-Match with current ETag and retry.[64] |
| 429 Too Many Requests | The user has sent too many requests in a given time period, indicating rate limiting (RFC 6585).[65] | Exceeding API quotas or throttling thresholds based on IP or credentials.[65] | Retry-After (delay before retry).[65] | Wait the duration specified in Retry-After and reduce request frequency before retrying.[65] |
| 431 Request Header Fields Too Large | The server is unwilling to process the request because its header fields are too large (RFC 6585).[66] | Excessive total header size or a single oversized header, like large cookies.[66] | None specified. | Trim unnecessary headers or compress values, then retry.[66] |
| 451 Unavailable For Legal Reasons | The server is denying access to the resource due to legal demands or restrictions (RFC 7725).[67] | Content blocked by court order, censorship, or regulatory compliance.[67] | Link (with rel="blocked-by" to the legal entity).[68] | Do not retry; seek legal alternatives or contact the blocking authority.[67] |
5xx: Server Errors
The 5xx class of HTTP status codes indicates that the server is aware that it has erred or is incapable of performing the requested method, despite the request appearing valid from the client's perspective.[69] These codes apply to any request method and distinguish server-side issues from client errors (4xx), emphasizing that the fault lies with the server and not requiring client-side corrections.[2] Many 5xx responses are transient, such as those arising from temporary overloads or upstream failures in proxies and load balancers, and clients are generally advised to retry the request with exponential backoff to avoid exacerbating the issue.[69] However, not all 5xx errors warrant retries; permanent limitations, like unsupported features, do not resolve through repetition.[70]| Code | Description | Common Causes and Examples | Retry Guidance |
|---|---|---|---|
| 500 Internal Server Error | A generic response for an unexpected server condition that prevents fulfilling the request, serving as a catch-all when no other 5xx code applies.[71] | Often due to unhandled exceptions, scripting errors, or internal misconfigurations, such as a database failure or application crash.[72] | Clients may retry after a short delay if the error is likely temporary, using exponential backoff to respect server load.[71] |
| 501 Not Implemented | Indicates that the server does not recognize or support the functionality needed to process the request, such as an unrecognized method.[73] | Typically occurs when a client uses a new or unsupported HTTP method (e.g., an experimental method like PATCH on a server limited to GET and POST) or an unavailable feature.[74][2] | Retries are not recommended, as the server lacks the capability; clients should use an alternative method or endpoint.[75] |
| 502 Bad Gateway | Signals that a server acting as a gateway or proxy received an invalid or erroneous response from an upstream server while attempting to fulfill the request.[76] | Common in load-balanced environments where the upstream server (e.g., an application server) returns malformed data, crashes, or is misconfigured.[72] | Clients may retry after a delay, as the issue could be transient; exponential backoff is advised to prevent overload.[76] |
| 503 Service Unavailable | Denotes that the server is temporarily unable to handle the request due to overload or maintenance, indicating a server-side issue not specific to the client's system, browser, or network (though client-side firewalls or ISP restrictions on non-standard ports may sometimes contribute to access issues), with the condition expected to resolve after a delay.[77] | Arises from high traffic causing overload, scheduled maintenance, or resource exhaustion, such as exceeding concurrent request limits in an application pool.[72] The response may include a Retry-After header specifying the wait time.[78] | Retries are recommended after the indicated delay or with backoff; this is a standard signal for temporary unavailability. |
| 504 Gateway Timeout | Indicates that a server acting as a gateway or proxy did not receive a timely response from an upstream server required to complete the request.[79] | Occurs in proxy setups when the upstream server (e.g., in a load balancer chain) times out due to slow processing, network delays, or unresponsiveness.[2] | Clients may retry after a delay if the upstream issue is transient; backoff strategies help mitigate repeated failures.[79] |
| 505 HTTP Version Not Supported | Means the server does not support or refuses the major HTTP protocol version used in the request.[80] | Triggered when a client sends a request with an incompatible version, such as HTTP/2 to a server limited to HTTP/1.1. | Retries are ineffective; clients must downgrade to a supported version or use a compatible protocol.[80] |
| 506 Variant Also Negotiates | Transparent content negotiation results in a circular reference, indicating an internal server configuration error where a negotiating resource refers to itself.[81] | Misconfigured content negotiation leading to loops in variant selection. | Retries unlikely to help; server configuration must be corrected by administrators.[81] |
| 507 Insufficient Storage | The server is unable to store the representation needed to successfully complete the request, often due to insufficient space (from WebDAV, RFC 4918).[82] | Disk quota exceeded or storage limits reached during upload or creation operations. | Free up storage or request more quota; retry after resolution.[82] |
| 508 Loop Detected | The server detected an infinite loop while processing the request, terminating the operation (from WebDAV, RFC 5842).[83] | Circular references in resource bindings or depth-infinity PROPFIND requests. | Retries not recommended without fixing the loop in server configuration or request.[83] |
| 511 Network Authentication Required | The client needs to authenticate to gain network access, typically from a captive portal (RFC 6585).[84] | Accessing a network without prior authentication, such as in public Wi-Fi hotspots. | Complete the authentication process in the browser or client as prompted.[84] |
Extension Codes
WebDAV and Protocol Extensions
WebDAV (Web Distributed Authoring and Versioning) introduces several HTTP status code extensions to support collaborative web content management, file locking, and batch operations on distributed resources. These codes build upon core HTTP semantics, particularly in the 2xx and 4xx ranges, to handle scenarios like partial successes and resource conflicts in protocols that enable authoring over HTTP. Defined in RFC 4918, WebDAV extensions are standardized for interoperability and require explicit server support, typically advertised via the "DAV" header.[85] They facilitate operations such as property manipulation and collection handling without relying on vendor-specific implementations. The 207 Multi-Status code indicates a response containing status information for multiple independent operations, allowing servers to report partial successes or failures in a single message. It is commonly used in WebDAV methods like PROPFIND, where a request on a collection returns results for multiple resources; for instance, the response body uses an XML "multistatus" element with individual "response" elements, each specifying an href (resource URL) and propstat (property status, such as 200 OK or 404 Not Found). This structure, with Content-Type: application/xml, enables efficient handling of hierarchical queries without multiple round trips.[86][87][88] The 208 Already Reported code, an extension for WebDAV bindings, prevents redundant enumeration of collection members in multi-status responses. It appears in DAV:propstat elements to signal that internal members of multiple bindings to the same collection have already been reported elsewhere, avoiding duplicates during "Depth: infinity" PROPFIND requests that could otherwise cause loops. For example, only the first binding reports a 200 status with full details, while subsequent ones use 208 and omit descendant listings, requiring client support via the "bind" token in the DAV header.[89] In the 4xx client error range, WebDAV defines codes for validation and dependency issues. The 422 Unprocessable Entity code signifies that the server understands the request's content type and syntax but cannot process it due to semantic errors, such as invalid XML in a PROPPATCH operation. It differs from 400 Bad Request by focusing on content semantics rather than syntax, providing a targeted indication for authoring failures.[90] The 423 Locked code denotes that a resource involved in the request (source or destination) is locked, blocking the operation unless a valid lock token is submitted. This supports WebDAV's locking mechanism to prevent concurrent modifications; for example, a DELETE on a locked resource returns 423, often accompanied by a precondition error like "lock-token-submitted."[58][91] The 424 Failed Dependency code indicates that the requested action could not proceed because it depended on another action that failed, commonly in batch or multi-resource operations. In PROPPATCH, for instance, if removing one property fails with 409 Conflict, a subsequent property set might return 424 to highlight the cascade. This code aids in diagnosing chained errors within WebDAV's multistatus framework.[60][92] Beyond core WebDAV, protocol extensions like delta encoding introduce the 226 IM Used code for efficient partial resource updates. It confirms that the server has applied one or more instance-manipulations (e.g., via the A-IM request header specifying "vcdiff") to the current resource instance, delivering a delta representation rather than the full entity. The response includes an IM header listing the manipulations and an ETag for the resulting instance, reducing bandwidth for incremental changes in HTTP/1.1.[93][94]| Code | Name | Class | Description | RFC |
|---|---|---|---|---|
| 207 | Multi-Status | 2xx | Status for multiple operations, e.g., in PROPFIND on collections. | RFC 4918 |
| 208 | Already Reported | 2xx | Avoids duplicate member reporting in WebDAV bindings. | RFC 5842 |
| 422 | Unprocessable Entity | 4xx | Semantic errors in well-formed requests, e.g., invalid PROPPATCH XML. | RFC 4918 |
| 423 | Locked | 4xx | Resource locked; requires valid token for access. | RFC 4918 |
| 424 | Failed Dependency | 4xx | Action failed due to prior dependent failure in batch ops. | RFC 4918 |
| 226 | IM Used | 2xx | Delta encoding applied successfully for partial updates. | RFC 3229 |
Provisional and Experimental Codes
Provisional and experimental HTTP status codes are those registered with the Internet Assigned Numbers Authority (IANA) on a temporary basis to support ongoing protocol development and testing, without full standardization. These codes allow implementers to experiment with new features in controlled environments, but they may be promoted to permanent status, modified, or withdrawn based on further review and adoption. IANA explicitly designates such codes as temporary in its registry, often tying them to specific Internet-Draft documents with defined expiration dates.[2] As of November 2025, the number of provisional codes remains limited, reflecting the cautious approach to extending the HTTP status code space. One notable example is the 104 status code, titled "Upload Resumption Supported," which was registered as temporary on November 13, 2024, with an extension to September 15, 2025, and set to expire on November 13, 2026. This code, defined in the Internet-Draft draft-ietf-httpbis-resumable-upload, enables servers to indicate support for resumable uploads by responding to a HEAD or OPTIONS request on an upload endpoint with the Upload-Offset header, specifying the current byte offset of the upload. It addresses challenges in modern networks prone to interruptions, such as mobile or unreliable connections, by allowing clients to resume large file uploads from the point of failure rather than restarting entirely, similar in spirit to informational responses like 100 Continue but tailored for upload scenarios.[2]Non-Standard Codes
Microsoft IIS Codes
Microsoft Internet Information Services (IIS), the web server software developed by Microsoft for Windows servers, incorporates proprietary substatus codes to augment standard HTTP status codes. These subcodes, formatted as a decimal extension to the three-digit code (e.g., 403.13), deliver enhanced diagnostic details for errors encountered during request processing. Primarily utilized in IIS logging for troubleshooting and performance analysis, they may also appear in HTTP responses when detailed error pages are configured, though they are not defined in the HTTP/1.1 specification or subsequent RFCs. This extension allows administrators to pinpoint issues related to configuration, security, and resource constraints more precisely than standard codes alone.[72] Subcodes for the 400 Bad Request status elaborate on client-side request malformations, such as invalid headers or body content. Examples include 400.1 for an invalid Destination header in WebDAV operations and 400.6 for an invalid request body, which can arise from malformed POST data. In IIS 8.0 and later, 400.10 addresses invalid X-Forwarded-For headers used in load balancing scenarios, while 400.11 flags invalid WebSocket requests. These subcodes span from 400.1 to approximately 400.12, with additional ARR (Application Request Routing) variants like 400.601 for bad client requests in proxy setups, aiding in identifying parsing failures without altering core HTTP semantics.[72] The 403 Forbidden category features extensive subcodes detailing access denial reasons, from permission issues to certificate problems. Notable variants include 403.1 for execute access forbidden on scripts or executables, 403.13 for a revoked client certificate in SSL environments, and 403.16 for an untrusted or invalid client certificate. Other examples encompass 403.7 requiring a client certificate, 403.14 denying directory listings for security, and 403.18 preventing URL execution outside the current application pool. Ranging from 403.1 to 403.22, with dynamic IP restriction extensions like 403.503 for denied IP addresses, these provide granular insights into authentication and authorization failures.[72] For 404 Not Found responses, IIS subcodes specify the nature of the missing resource or request violation. Key instances are 404.15 for a query string exceeding length limits, 404.13 for content length too large, and 404.14 for the overall request URL being too long. Additional details cover 404.7 denying specific file extensions via MIME restrictions, 404.5 blocked by request filtering rules, and 404.19 rejected due to a filtering rule match. These subcodes, from 404.0 to 404.20, including IP-based denials like 404.503, facilitate debugging of URL resolution, security filters, and size-based rejections.[72] Internal server errors under 500 are broken down to isolate causes like configuration errors or resource exhaustion. Representative subcodes include 500.19 for invalid configuration data in web.config or applicationHost.config files, 500.13 indicating the web server is too busy to handle the request, and 500.11 signaling an application shutdown in progress. Others, such as 500.0 for a general module or ISAPI error and 500.21 for an unrecognized module, range from 500.0 to 500.24, with rewrite module specifics like 500.50 for errors during request beginning. These help trace server-side faults, from busy states to pipeline misconfigurations.[72] The 501 Not Implemented status in IIS is returned when request headers specify a server configuration or method not supported, such as unknown HTTP verbs beyond those in RFC 2616. While subcodes like 501.1 and 501.2 have been referenced in older IIS documentation for specific implementation gaps (e.g., unsupported CGI configurations), current versions primarily log the base 501 without routine substatus extensions. This code underscores IIS's adherence to defined protocols while highlighting custom or deprecated features.[72][95]nginx and Other Server Codes
Nginx, a popular open-source web server, introduces several non-standard HTTP status codes to handle specific error conditions related to request processing and SSL/TLS interactions. These codes are not part of the IETF HTTP specifications but are used internally by nginx to provide more granular error reporting, often mapped to standard 4xx client errors in responses to clients. They are particularly useful for debugging server-side issues involving oversized requests or SSL misconfigurations.[96] The 494 status code indicates that the request header or cookie is too large, exceeding the server's configured limits (e.g., via thelarge_client_header_buffers directive). Introduced in nginx version 0.9.4, this code helps identify clients sending excessively long headers, which could be due to malicious activity or misconfigured applications, and it typically results in a 400 Bad Request response to the client unless customized via the error_page directive.[97]
In SSL/TLS contexts, nginx uses 495 for errors during client certificate verification, such as invalid or untrusted certificates provided by the client. This code signals issues like certificate revocation problems or chain validation failures, often triggered when ssl_verify_client is enabled. Similarly, 496 is returned when a client fails to present a required SSL certificate during the handshake, enforcing mandatory client authentication in secure environments. The 497 code is specific to scenarios where a plain HTTP request is sent to an HTTPS port, allowing the server to reject non-encrypted traffic on secure endpoints without fully processing the request. These SSL-related codes (495, 496, and 497) are documented in nginx's SSL module and can be intercepted and redirected using error pages for user-friendly responses.[96]
Other servers, such as Apache HTTP Server, also employ non-standard codes in certain configurations, particularly for security features like Cross-Site Request Forgery (CSRF) protection. The 419 status code, often labeled "Page Expired," is used in Apache environments running frameworks like Laravel to indicate an expired or invalid session token, preventing unauthorized form submissions. This code is not native to Apache's core but arises from application-level handling of CSRF tokens, typically resulting in a client-side prompt to refresh the page and resubmit.[98]
These non-standard codes from nginx and Apache are primarily server-internal mechanisms for enhanced error handling, security enforcement, and configuration validation. They are often transparent to end-users, who receive standard 4xx or 5xx responses, but they aid administrators in logging and troubleshooting issues like rate limiting violations (e.g., similar to 429 for too many requests) without exposing proprietary details.[99]
CDN and Load Balancer Codes
Content Delivery Networks (CDNs) and load balancers, such as Cloudflare and AWS Elastic Load Balancing (ELB), extend the standard HTTP status codes with proprietary ones to provide more granular diagnostics for network and origin server issues. These codes are typically returned to clients when the intermediary service encounters problems communicating with the backend origin, often manifesting as infrastructure or connectivity failures rather than direct client or server errors. Unlike standard 5xx codes, these extensions help operators pinpoint distributed system challenges, such as timeouts or configuration mismatches, without altering the core HTTP protocol. They are non-standard and specific to the provider's ecosystem.[100] Cloudflare uses a series of 52x codes to signal errors in its proxying of requests to origin servers. Error 520 indicates that the origin web server returned an empty, unknown, or unexpected response to Cloudflare, preventing proper interpretation of the reply; this often stems from malformed headers or server-side anomalies.[101] Error 521 occurs when the origin web server refuses connections from Cloudflare, typically because the server is down or blocking Cloudflare's IP ranges.[102] Error 522 occurs when Cloudflare cannot negotiate a TCP handshake on the origin's port (after 19 seconds without SYN+ACK) or when the origin web server does not acknowledge Cloudflare's resource request within 90 seconds after a connection is established, due to network latency or firewall restrictions.[103] Error 523 means the origin is unreachable, often from DNS resolution failures or invalid IP configurations at the origin.[104] Error 524 is triggered when a connection to the origin is established but no response is received within 120 seconds (default proxy read timeout), pointing to slow processing or resource exhaustion on the backend.[105] Error 525 denotes a failed SSL/TLS handshake between Cloudflare and the origin, commonly caused by incompatible ciphers, expired certificates, or protocol mismatches.[106] Error 526 is returned when the origin presents an invalid SSL certificate, such as one that is expired, revoked, or not matching the requested domain.[107] AWS Application Load Balancer (ALB), part of Elastic Load Balancing, introduces 46x codes in access logs and responses to denote client-side or proxy-specific issues that affect request handling. Code 460 is issued when the client closes the connection to the load balancer before the configured idle timeout expires, often due to the client's shorter timeout settings or abrupt termination; the load balancer logs this but may not always propagate it directly to the client as a visible response.[108] Code 463 occurs when the X-Forwarded-For header in the request contains more than 30 IP addresses, exceeding the load balancer's limit for tracking proxy chains and leading to request rejection.[108] These codes complement standard gateway errors like 502 (Bad Gateway) and 504 (Gateway Timeout) by offering provider-specific insights into why the proxy failed to forward or receive responses from origins.[108] In practice, these CDN and load balancer codes are invisible to end-users unless exposed in error pages, but they aid in debugging distributed architectures where standard 5xx codes provide insufficient detail on intermediary failures. Administrators should consult provider logs and metrics to correlate these with origin health, ensuring alignment between proxy timeouts and backend capabilities.[100][108]Obsoleted and Deprecated Codes
Caching Warning Codes
The Warning header was introduced in HTTP/1.1 as a general-header field to carry additional information about the status or transformation of a message that might not be reflected in the status code itself.[109] It was particularly intended for use by caches to alert clients about potential issues with cached responses, such as staleness or failed validation, thereby promoting semantic transparency in caching operations.[110] The header could appear multiple times in a response and followed a structured format:Warning = 1#warning-value, where each warning-value consisted of a three-digit warn-code, an agent identifier, human-readable warn-text, and an optional warn-date.[109]
Caching-related warnings were identified by 1xx warn-codes, which were generated exclusively by caches and intended for display to end users; these were to be deleted from the response after successful revalidation.[109] The following table summarizes the standard 1xx caching warning codes defined in HTTP/1.1:
| Code | Description |
|---|---|
| 110 | Response is stale: Indicates that the returned response is stale, and it must be included whenever a cache serves stale content.[110] |
| 111 | Revalidation failed: Signals that an attempt to revalidate a stale response failed, requiring inclusion when such a failure occurs.[111] |
| 112 | Disconnected operation: Warns that the cache is intentionally disconnected from the origin server, and it should be added for stale responses served in this state.[112] |
| 113 | Heuristic expiration: Applies when a cache uses heuristic freshness estimation that exceeds 24 hours and the response age surpasses 24 hours; it must be included in such cases.[111] |
| 199 | Miscellaneous warning: A catch-all for other cache-related warnings without automated client actions, intended for human-readable information.[109] |