tigtools

HTTP Status Codes

Look up any HTTP status code: what it means, when servers send it and which specification defines it. Search by number or keyword, filter by class, and link straight to a code.

Runs in your browser No sign-up

79 codes shown

  • 100 Continue

    The server received the request headers and the client may send the body. Seen when a client sends “Expect: 100-continue” before uploading a large body.

    Defined in RFC 9110

  • 101 Switching Protocols

    The server agrees to switch to the protocol the client asked for in the Upgrade header. Seen when a connection is upgraded to WebSocket.

    Defined in RFC 9110

  • 102 Processing

    Obsolete or unused

    The server has accepted a WebDAV request but has not finished it yet. It was removed from later WebDAV specifications and is rarely used today.

    Defined in RFC 2518

  • 103 Early Hints

    Sent before the final response so the browser can start preloading resources listed in Link headers. Used by CDNs and servers to speed up page loads.

    Defined in RFC 8297

  • 200 OK

    The request succeeded and the response contains the result. This is the normal response for a page load or a successful API call.

    Defined in RFC 9110

  • 201 Created

    The request succeeded and created a new resource, usually identified by the Location header. Typical after a successful POST that creates a record.

    Defined in RFC 9110

  • 202 Accepted

    The request was accepted for processing but is not finished. Used by APIs that queue work, such as exports or batch jobs.

    Defined in RFC 9110

  • 203 Non-Authoritative Information

    The request succeeded but a transforming proxy modified the content returned by the origin server.

    Defined in RFC 9110

  • 204 No Content

    The request succeeded and there is no content to return. Common for DELETE requests and for saving data when the client does not need a response body.

    Defined in RFC 9110

  • 205 Reset Content

    The request succeeded and the client should reset the document view, for example clear a form. Rarely used.

    Defined in RFC 9110

  • 206 Partial Content

    The server returns only the byte range the client asked for. Seen when videos stream, downloads resume, or a client sends a Range header.

    Defined in RFC 9110

  • 207 Multi-Status

    A WebDAV response that contains separate status codes for multiple resources in an XML body.

    Defined in RFC 4918

  • 208 Already Reported

    Used inside a WebDAV 207 response to avoid listing the same bound resource members again.

    Defined in RFC 5842

  • 226 IM Used

    The server applied instance manipulations (such as a delta encoding) to the current resource. Very rarely seen.

    Defined in RFC 3229

  • 300 Multiple Choices

    The resource has several representations and the client should choose one. Rarely used in practice.

    Defined in RFC 9110

  • 301 Moved Permanently

    The resource has moved permanently to the URL in the Location header. Browsers and search engines update their links; some clients change POST to GET when following it.

    Defined in RFC 9110

  • 302 Found

    The resource is temporarily at another URL given in the Location header. Common after logins and for short-term redirects; browsers usually follow it with GET.

    Defined in RFC 9110

  • 303 See Other

    The client should fetch the result from another URL with GET. Used after a form POST to redirect to a confirmation page (the Post/Redirect/Get pattern).

    Defined in RFC 9110

  • 304 Not Modified

    The cached copy is still valid, so the server sends no body. Seen when a browser revalidates a cached file with If-None-Match or If-Modified-Since.

    Defined in RFC 9110

  • 305 Use Proxy

    Obsolete or unused

    Asked the client to use a proxy given in the Location header. It is deprecated for security reasons and browsers ignore it.

    Defined in RFC 9110

  • 306 (Unused)

    Obsolete or unused

    Reserved. It was used in an earlier draft of HTTP/1.1 and is no longer used.

    Defined in RFC 9110

  • 307 Temporary Redirect

    The resource is temporarily at another URL and the client must repeat the request with the same method and body. Also used by browsers for internal HSTS redirects to HTTPS.

    Defined in RFC 9110

  • 308 Permanent Redirect

    The resource has moved permanently and the client must use the same method and body at the new URL. The permanent counterpart of 307, safe for redirecting POST requests.

    Defined in RFC 9110

  • 400 Bad Request

    The server cannot process the request because it is malformed, for example invalid JSON, a bad query parameter or a corrupted cookie.

    Defined in RFC 9110

  • 401 Unauthorized

    The request lacks valid authentication credentials. Despite the name, it means “unauthenticated”; the server sends a WWW-Authenticate header describing how to log in.

    Defined in RFC 9110

  • 402 Payment Required

    Reserved for future use in the HTTP specification. Some APIs and payment services use it when a payment or subscription is required.

    Defined in RFC 9110

  • 403 Forbidden

    The server understood the request but refuses it, and logging in again will not help. Seen when permissions are missing, a directory listing is disabled or a firewall blocks the client.

    Defined in RFC 9110

  • 404 Not Found

    The server cannot find the requested resource. Usually a mistyped or outdated link, a deleted page, or a wrong API route.

    Defined in RFC 9110

  • 405 Method Not Allowed

    The resource exists but does not support the HTTP method used, such as POST to a read-only URL. The response lists the allowed methods in the Allow header.

    Defined in RFC 9110

  • 406 Not Acceptable

    The server cannot produce a response in any format listed in the client's Accept headers.

    Defined in RFC 9110

  • 407 Proxy Authentication Required

    Like 401, but the client must first authenticate with a proxy. Seen on corporate networks with an authenticating proxy.

    Defined in RFC 9110

  • 408 Request Timeout

    The server timed out waiting for the client to finish sending the request. Seen on slow or interrupted connections.

    Defined in RFC 9110

  • 409 Conflict

    The request conflicts with the current state of the resource, such as an edit conflict or creating something that already exists.

    Defined in RFC 9110

  • 410 Gone

    The resource has been removed permanently and will not come back. Unlike 404, it tells search engines to drop the URL faster.

    Defined in RFC 9110

  • 411 Length Required

    The server requires a Content-Length header and the request did not include one.

    Defined in RFC 9110

  • 412 Precondition Failed

    A condition in the request headers, such as If-Match, was not met. Used to prevent overwriting a resource that changed since the client last read it.

    Defined in RFC 9110

  • 413 Content Too Large

    The request body is larger than the server accepts. Seen when uploading a file over a limit such as nginx's client_max_body_size.

    Defined in RFC 9110

  • 414 URI Too Long

    The URL is longer than the server will process. Usually caused by a form sending too much data with GET or a redirect loop that keeps appending parameters.

    Defined in RFC 9110

  • 415 Unsupported Media Type

    The server does not support the format of the request body, for example sending XML to an endpoint that expects application/json.

    Defined in RFC 9110

  • 416 Range Not Satisfiable

    The byte range requested in the Range header is outside the size of the resource.

    Defined in RFC 9110

  • 417 Expectation Failed

    The server cannot meet the requirement in the client's Expect header.

    Defined in RFC 9110

  • 418 I'm a teapot

    An April Fools' joke from the 1998 Hyper Text Coffee Pot Control Protocol: a teapot refusing to brew coffee. HTTP reserves the code as unused, but some servers return it as an Easter egg or to reject unwanted bots.

    Defined in RFC 2324 / RFC 9110 (Unused)

  • 419 Page Expired

    Non-standard

    Not a standard code. Laravel returns it when a form's CSRF token is missing or has expired, typically after a session timed out.

    Defined in Laravel

  • 420 Enhance Your Calm

    Non-standard

    Not a standard code. The old Twitter API used it for rate limiting; 429 is the standard code for this.

    Defined in Twitter API v1

  • 421 Misdirected Request

    The request reached a server that cannot produce a response for this host, for example when an HTTP/2 connection is reused for a different domain.

    Defined in RFC 9110

  • 422 Unprocessable Content

    The request is well-formed but its content is invalid, such as a form with failed validation rules. Widely used by APIs for validation errors.

    Defined in RFC 9110

  • 423 Locked

    The WebDAV resource is locked and cannot be changed.

    Defined in RFC 4918

  • 424 Failed Dependency

    The WebDAV request failed because another action it depended on failed.

    Defined in RFC 4918

  • 425 Too Early

    The server will not process a request that might be replayed, such as one sent in TLS 1.3 early data.

    Defined in RFC 8470

  • 426 Upgrade Required

    The server refuses the request with the current protocol and names the required one in the Upgrade header.

    Defined in RFC 9110

  • 428 Precondition Required

    The server requires a conditional request (for example with If-Match) to prevent lost updates.

    Defined in RFC 6585

  • 429 Too Many Requests

    The client has sent too many requests in a given time. APIs use it for rate limiting and often include a Retry-After header saying when to try again.

    Defined in RFC 6585

  • 431 Request Header Fields Too Large

    The request headers are too large, often because of too many or oversized cookies. Clearing the site's cookies usually fixes it.

    Defined in RFC 6585

  • 444 No Response

    Non-standard

    Not a standard code. nginx uses it internally to close the connection without sending any response, often to drop unwanted traffic; clients never actually receive it.

    Defined in nginx

  • 451 Unavailable For Legal Reasons

    The resource is unavailable for legal reasons, such as a court order or government censorship. The number references the novel Fahrenheit 451.

    Defined in RFC 7725

  • 494 Request Header Too Large

    Non-standard

    Not a standard code. nginx's own variant of 431, logged when request headers exceed its buffer limits.

    Defined in nginx

  • 495 SSL Certificate Error

    Non-standard

    Not a standard code. nginx returns it when a client certificate fails verification.

    Defined in nginx

  • 496 SSL Certificate Required

    Non-standard

    Not a standard code. nginx returns it when a required client certificate was not provided.

    Defined in nginx

  • 497 HTTP Request Sent to HTTPS Port

    Non-standard

    Not a standard code. nginx returns it when a plain HTTP request is sent to a port configured for HTTPS.

    Defined in nginx

  • 499 Client Closed Request

    Non-standard

    Not a standard code. nginx logs it when the client closed the connection before the server responded, for example a user cancelling a slow page or a client-side timeout.

    Defined in nginx

  • 500 Internal Server Error

    The server hit an unexpected error and could not complete the request. A generic error from a bug, crash or misconfiguration; the server logs have the details.

    Defined in RFC 9110

  • 501 Not Implemented

    The server does not support the functionality needed, such as an HTTP method it does not recognise.

    Defined in RFC 9110

  • 502 Bad Gateway

    A gateway or proxy received an invalid response from the upstream server. Common when the application behind nginx or a load balancer has crashed or is restarting.

    Defined in RFC 9110

  • 503 Service Unavailable

    The server is temporarily unable to handle the request because it is overloaded or down for maintenance. A Retry-After header may say when to try again.

    Defined in RFC 9110

  • 504 Gateway Timeout

    A gateway or proxy did not get a response from the upstream server in time. Seen when a backend request is too slow, such as a long database query.

    Defined in RFC 9110

  • 505 HTTP Version Not Supported

    The server does not support the HTTP version used in the request.

    Defined in RFC 9110

  • 506 Variant Also Negotiates

    A content negotiation configuration error on the server: the chosen variant itself is configured to negotiate.

    Defined in RFC 2295

  • 507 Insufficient Storage

    The server cannot store what is needed to complete the request, for example a full disk on a WebDAV server.

    Defined in RFC 4918

  • 508 Loop Detected

    The server stopped a WebDAV operation because it found an infinite loop.

    Defined in RFC 5842

  • 509 Bandwidth Limit Exceeded

    Non-standard

    Not a standard code. Used by some shared hosting setups (Apache modules, cPanel) when a site exceeds its bandwidth allowance.

    Defined in Apache / cPanel

  • 510 Not Extended

    Obsolete or unused

    The request needs further extensions to be fulfilled. Defined by an experimental specification that is now historic.

    Defined in RFC 2774

  • 511 Network Authentication Required

    The client must authenticate to gain network access. Sent by captive portals on hotel, airport or café Wi-Fi before you log in.

    Defined in RFC 6585

  • 520 Web Server Returned an Unknown Error

    Non-standard

    Not a standard code. Cloudflare returns it when the origin server sent an empty, unknown or unexpected response.

    Defined in Cloudflare

  • 521 Web Server Is Down

    Non-standard

    Not a standard code. Cloudflare returns it when the origin server refused the connection, usually because the web server is down or blocking Cloudflare's IP addresses.

    Defined in Cloudflare

  • 522 Connection Timed Out

    Non-standard

    Not a standard code. Cloudflare returns it when the TCP connection to the origin server timed out.

    Defined in Cloudflare

  • 523 Origin Is Unreachable

    Non-standard

    Not a standard code. Cloudflare returns it when it cannot reach the origin server, for example because of a DNS or routing problem.

    Defined in Cloudflare

  • 524 A Timeout Occurred

    Non-standard

    Not a standard code. Cloudflare returns it when it connected to the origin but did not receive an HTTP response within its timeout (100 seconds by default).

    Defined in Cloudflare

  • 525 SSL Handshake Failed

    Non-standard

    Not a standard code. Cloudflare returns it when the SSL/TLS handshake with the origin server failed.

    Defined in Cloudflare

  • 526 Invalid SSL Certificate

    Non-standard

    Not a standard code. Cloudflare returns it when the origin's SSL certificate is invalid and the Full (strict) SSL mode is enabled.

    Defined in Cloudflare

How to use it

  1. Type a code number (such as 404 or just 5 for all server errors) or a keyword such as “redirect” or “timeout”.
  2. Narrow the list with the class filter: informational, success, redirection, client error or server error.
  3. Use “Copy link” on any code to share a direct link to it, for example in a bug report.

How it works

Every HTTP response starts with a three-digit status code. The first digit sets the class: 1xx informational responses, 2xx success, 3xx redirection, 4xx errors caused by the request, and 5xx errors on the server side. Clients that do not recognise a specific code treat it like the x00 code of its class, so an unknown 4xx code is handled like 400.

The core codes are defined in RFC 9110 (HTTP Semantics, 2022), which replaced the older RFC 7231. Others come from extensions: WebDAV (RFC 4918), RFC 6585 for 428, 429, 431 and 511, RFC 7725 for 451, and RFC 8470 for 425. RFC 9110 also renamed two codes: 413 is now “Content Too Large” and 422 “Unprocessable Content”, which you may still see under their old names “Payload Too Large” and “Unprocessable Entity”.

Some codes you meet in logs are not standards at all. nginx uses 444 and 494–499 internally (499 shows a client that gave up waiting), and Cloudflare returns 520–526 when it cannot get a proper answer from the origin server. These are marked “Non-standard” in the list. The reason phrases (such as “Not Found”) are shown in English as written in the specifications; HTTP/2 and HTTP/3 send only the number.

Examples

301 or 308 when moving a site

Both are permanent. Use 301 for ordinary page moves; use 308 when clients must repeat POST or PUT requests to the new URL, because some clients change POST to GET after a 301.

401 versus 403

An API returns 401 when no token or an expired token is sent, so the client should log in. It returns 403 when the token is valid but the user lacks permission, so logging in again will not help.

Diagnosing a 502 behind nginx

A 502 Bad Gateway from nginx means the application behind it did not answer properly. Check whether the app process is running and what it logged; 504 instead means it answered too slowly.

Frequently asked questions

What is the difference between 404 and 410?

404 means the server cannot find the resource and says nothing about the future. 410 says the resource was deliberately removed and will not return, which helps search engines drop the URL sooner.

Should a validation error return 400 or 422?

Both are used. 400 fits requests the server cannot parse, such as broken JSON. 422 fits requests that parse correctly but contain invalid values, such as an email field without an @.

Is 418 I'm a teapot a real status code?

It comes from an April Fools' RFC from 1998. RFC 9110 reserves 418 as unused so it is not assigned to anything else, and a few servers return it as a joke, but it has no standard meaning.

Where does 499 come from?

499 is nginx-specific. It appears in nginx logs when the client closes the connection before the server sends a response. The client never receives a 499; it usually points to slow responses or client-side timeouts.

Do search engines treat 302 like 301?

A 302 signals a temporary move, so search engines usually keep the original URL indexed at first. If a 302 stays in place for a long time, Google may treat it like a permanent redirect. Use 301 or 308 for permanent moves.

Privacy

The list is part of the page. Searching and filtering happen in your browser; your search terms are not sent anywhere or included in analytics.