HTTP Status Codes — Complete List & Lookup
Look up any HTTP status code to see what it means, why it happens, how to fix it and how it affects SEO — including unofficial codes from Cloudflare, nginx and others.
Runs in your browser — nothing is uploaded Free, no limits
85 of 85 codes
1xx Informational
The request was received and is continuing to be processed.
100ContinueThe server got the request headers; the client should send the body.
Sent in reply to a request with an Expect: 100-continue header, so a client can check the server will accept a large upload before sending it. Browsers rarely see it; it's common with API clients such as curl.
Defined in: RFC 9110 §15.2.1 · Link to 100
101Switching ProtocolsThe server is switching to the protocol the client asked for in Upgrade.
Most often seen when a WebSocket connection is opened: the HTTP/1.1 connection is upgraded and from then on carries the WebSocket protocol.
Defined in: RFC 9110 §15.2.2 · Link to 101
102ProcessingThe server accepted the request and is still working on it.
A WebDAV interim response that stopped clients timing out on long operations. It was removed from later WebDAV specs and is considered deprecated.
Defined in: RFC 2518 (WebDAV) · Link to 102
103Early HintsPreliminary Link headers so the browser can preload resources early.
Sent before the final response while the server is still building the page. The browser can start preloading or preconnecting to CSS, fonts and scripts listed in Link headers, improving load time. Supported by Chrome, Edge, Firefox and CDNs such as Cloudflare.
SEO impact: Can improve Largest Contentful Paint (a Core Web Vital) by starting critical downloads sooner.
Defined in: RFC 8297 · Link to 103
2xx Success
The request was received, understood and accepted.
200OKThe request succeeded.
The standard success response. For GET the body is the requested resource; for POST it typically describes the result of the action.
SEO impact: The only status search engines index as a normal page. Make sure error pages don't return 200 (a "soft 404").
Defined in: RFC 9110 §15.3.1 · Link to 200
201CreatedThe request succeeded and a new resource was created.
Typical reply to a POST or PUT that creates something. The Location header should point to the new resource.
Defined in: RFC 9110 §15.3.2 · Link to 201
202AcceptedThe request was accepted for processing, but it isn't finished yet.
Used for asynchronous jobs (exports, video processing, queued emails). The response often includes a link where the client can check progress.
Defined in: RFC 9110 §15.3.3 · Link to 202
203Non-Authoritative InformationSuccess, but a proxy modified the original response.
A transforming proxy changed the origin server's 200 response (for example, compressed images or altered headers) and is telling the client so.
Defined in: RFC 9110 §15.3.4 · Link to 203
204No ContentSuccess, with no body to return.
Common for DELETE requests, saving settings via an API, and CORS preflight responses. The browser stays on the current page.
Defined in: RFC 9110 §15.3.5 · Link to 204
205Reset ContentSuccess; the client should reset the form or view that sent the request.
Tells the user agent to clear the document view, e.g. empty a form after submission so another entry can be made. Rarely used in practice.
Defined in: RFC 9110 §15.3.6 · Link to 205
206Partial ContentOnly part of the resource is returned, as requested with a Range header.
Used for resumable downloads and media streaming: the client asks for a byte range and the server returns just that part with a Content-Range header.
Defined in: RFC 9110 §15.3.7 · Link to 206
207Multi-StatusThe body contains separate status codes for several sub-operations.
A WebDAV response (an XML body) used when one request affects multiple resources and each may have a different result.
Defined in: RFC 4918 (WebDAV) · Link to 207
208Already ReportedMembers of a WebDAV binding were already listed earlier in this response.
Used inside a 207 Multi-Status body to avoid listing the same resource repeatedly when it's reachable through multiple bindings.
Defined in: RFC 5842 (WebDAV) · Link to 208
226IM UsedThe response is the result of instance manipulations (delta encoding) on the resource.
Part of HTTP delta encoding: the server sends only the differences from a version the client already has. Very rarely used.
Defined in: RFC 3229 · Link to 226
3xx Redirection
Further action (usually following a new URL) is needed to complete the request.
300Multiple ChoicesThere are several representations; the client should choose one.
For example different languages or formats. There's no standard way to pick automatically, so it's rarely used — most sites negotiate or redirect instead.
Defined in: RFC 9110 §15.4.1 · Link to 300
301Moved PermanentlyThe resource has a new permanent URL, given in the Location header.
Browsers cache 301s aggressively and go straight to the new URL next time. Clients may change a POST into a GET when following it; use 308 if the method must be kept.
SEO impact: The standard redirect for permanent moves (http→https, domain changes, new slugs). Search engines replace the old URL with the new one in their index and pass ranking signals. Point it at the final URL to avoid chains.
Defined in: RFC 9110 §15.4.2 · Link to 301
302FoundThe resource is temporarily at a different URL.
The client should keep using the original URL for future requests. Historically browsers change POST to GET when following a 302; 307 is the method-preserving equivalent.
SEO impact: Signals a temporary move, so Google usually keeps the original URL indexed. If the move is permanent, use 301 instead. Google may treat a long-standing 302 as permanent eventually, but don't rely on it.
Defined in: RFC 9110 §15.4.3 · Link to 302
303See OtherGo and GET a different URL for the result.
Used after a form POST to send the browser to a confirmation page with GET (the Post/Redirect/Get pattern), which prevents duplicate submissions on refresh.
SEO impact: Treated as a temporary redirect.
Defined in: RFC 9110 §15.4.4 · Link to 303
304Not ModifiedThe cached copy is still valid; no body is sent.
Reply to a conditional request (If-None-Match with an ETag, or If-Modified-Since). The client uses its cached version, saving bandwidth.
SEO impact: Good for crawl efficiency: Googlebot supports conditional requests and spends less crawl budget on unchanged pages.
Defined in: RFC 9110 §15.4.5 · Link to 304
305Use ProxyDeprecated: the resource must be accessed through a proxy.
Deprecated for security reasons (it could make a client use an attacker-chosen proxy). Browsers ignore it.
Defined in: RFC 9110 §15.4.6 · Link to 305
306(Unused)Reserved; no longer used.
Was once "Switch Proxy" in a draft spec. The code is reserved and must not be used.
Defined in: RFC 9110 §15.4.7 · Link to 306
307Temporary RedirectTemporarily at another URL; repeat the request with the same method and body.
Like 302, but the client must not change the method — a POST stays a POST. Browsers also show an internal 307 when HSTS forces http to https (no request is actually sent).
SEO impact: Temporary: search engines keep the original URL indexed.
Defined in: RFC 9110 §15.4.8 · Link to 307
308Permanent RedirectPermanently at another URL; repeat the request with the same method and body.
The method-preserving version of 301. Supported by all modern browsers.
SEO impact: Treated the same as 301 by Google: the new URL replaces the old one and signals are consolidated.
Defined in: RFC 9110 §15.4.9 (originally RFC 7538) · Link to 308
4xx Client error
The request has a problem on the client's side — bad syntax, missing auth, or a resource that isn't there.
400Bad RequestThe server can't process the request because it's malformed.
Covers anything the server considers a client error that has no more specific code: invalid syntax, bad JSON, invalid query parameters, oversized or corrupt cookies.
Common causes
- Malformed URL or query string
- Invalid JSON or form data sent to an API
- Corrupt or oversized cookies
- Missing required parameters
How to fix it
- Visitors: clear cookies for the site and retry; check the URL for typos
- Developers: read the response body — APIs usually explain what's wrong; validate input before sending
Defined in: RFC 9110 §15.5.1 · Link to 400
401UnauthorizedAuthentication is required and missing or invalid.
Despite the name it means unauthenticated. The response must include a WWW-Authenticate header describing how to log in (Basic, Bearer…).
Common causes
- Not logged in or session expired
- Missing, expired or wrong API key / bearer token
- Wrong username or password for HTTP Basic auth
How to fix it
- Log in again or refresh the access token
- Check the Authorization header is sent and correctly formatted
- Use 403, not 401, when the user is logged in but not allowed
SEO impact: Pages behind 401 can't be crawled or indexed. Fine for private areas — keep public content public.
Defined in: RFC 9110 §15.5.2 · Link to 401
402Payment RequiredReserved for future use; some APIs use it for billing problems.
There's no standard meaning. Some services (for example Stripe and some SaaS APIs) return it when a payment failed or a plan limit or subscription has lapsed.
Common causes
- Payment declined or subscription expired on a paid API
- Quota of a paid plan exhausted
How to fix it
- Check billing details and plan limits with the service provider
Defined in: RFC 9110 §15.5.3 · Link to 402
403ForbiddenThe server understood the request but refuses to allow it.
Authentication won't help (or you're already authenticated): you simply don't have permission. Web application firewalls and bot protection also answer with 403.
Common causes
- File or folder permissions on the server (e.g. not readable by the web server)
- No index file and directory listing disabled
- IP, country or user-agent block by a firewall/WAF or CDN
- Logged-in user lacks the required role
- .htaccess deny rules or hotlink protection
How to fix it
- Server owners: check file permissions (typically 644 for files, 755 for folders) and ownership
- Make sure an index.html/index.php exists
- Review WAF/CDN firewall events for blocked requests
- Visitors: disable VPN, clear cookies, or contact the site owner
SEO impact: Googlebot treats 403 like 404 for indexing: the page is dropped. Check that your firewall isn't blocking real search engine crawlers.
Defined in: RFC 9110 §15.5.4 · Link to 403
404Not FoundThe server can't find anything at this URL.
The most famous error. It doesn't say whether the absence is temporary or permanent. Servers also use it to hide resources a client isn't allowed to know about.
Common causes
- Typo in the URL or a broken link
- Page deleted or moved without a redirect
- Wrong rewrite/routing rules (e.g. missing .htaccess or permalink settings)
- Case-sensitive paths on Linux servers
How to fix it
- Add a 301 redirect from the old URL to the most relevant new page
- Fix internal links pointing to the URL
- Give the 404 page helpful navigation and search
- Make sure the 404 page really returns status 404, not 200
SEO impact: 404s for pages that never existed don't hurt rankings. Pages that return 404 are dropped from the index after recrawling; redirect removed pages that have backlinks or traffic. Returning 200 on an error page creates a "soft 404".
Defined in: RFC 9110 §15.5.5 · Link to 404
405Method Not AllowedThe URL exists but doesn't support this HTTP method.
For example a POST to a URL that only accepts GET. The response must include an Allow header listing the supported methods.
Common causes
- Form or API call using the wrong method
- Server or framework route only defined for another method
- WebDAV or a security module blocking PUT/DELETE
How to fix it
- Check the Allow header and use one of the listed methods
- Add a route/handler for the method on the server
Defined in: RFC 9110 §15.5.6 · Link to 405
406Not AcceptableNo representation matches the client's Accept headers.
Content negotiation failed: the client asked (via Accept, Accept-Language, etc.) for a format or language the server can't provide. Some security modules (e.g. mod_security) also misuse 406 to block requests.
Common causes
- Overly strict Accept header on an API request
- mod_security rules blocking the request
How to fix it
- Send a broader Accept header (e.g. */*)
- Check server security-module logs
Defined in: RFC 9110 §15.5.7 · Link to 406
407Proxy Authentication RequiredYou must authenticate with the proxy first.
Like 401, but for a proxy between the client and the server. The proxy sends a Proxy-Authenticate header.
Common causes
- Corporate proxy requires login
- Wrong proxy credentials configured
How to fix it
- Configure proxy credentials in your system, browser or HTTP client
Defined in: RFC 9110 §15.5.8 · Link to 407
408Request TimeoutThe server gave up waiting for the client to finish sending the request.
The client opened a connection but didn't send a complete request in time. Servers may also send it to close idle keep-alive connections.
Common causes
- Slow or unstable client connection
- Large uploads on a slow link
- Server request timeout set too low
How to fix it
- Retry the request
- Increase the server's client body/header timeout if uploads legitimately take long
Defined in: RFC 9110 §15.5.9 · Link to 408
409ConflictThe request conflicts with the current state of the resource.
Typical in APIs: creating something that already exists, or editing a record someone else changed in the meantime.
Common causes
- Duplicate unique value (username, email, ID)
- Concurrent edit / version mismatch
How to fix it
- Fetch the latest version, resolve the conflict and retry
- Use a different unique value
Defined in: RFC 9110 §15.5.10 · Link to 409
410GoneThe resource was here but has been removed permanently.
A stronger statement than 404: the server knows the content existed and won't come back, so clients should delete links to it.
Common causes
- Content intentionally deleted (expired listings, discontinued products)
How to fix it
- If there's a relevant replacement, use a 301 to it instead
- Otherwise keep the 410 and remove internal links
SEO impact: Google treats 410 almost like 404 but may drop the URL from the index slightly faster. Use it for content that's gone for good.
Defined in: RFC 9110 §15.5.11 · Link to 410
411Length RequiredThe server requires a Content-Length header.
The request had a body but no Content-Length, and the server won't accept chunked transfer for it.
Common causes
- Client sends a POST/PUT body without Content-Length
- Empty POST with no Content-Length: 0
How to fix it
- Send Content-Length (Content-Length: 0 for an empty body)
Defined in: RFC 9110 §15.5.12 · Link to 411
412Precondition FailedA condition in the request headers (e.g. If-Match) wasn't met.
Used for optimistic concurrency: the client says "only update if the ETag is still X" and the resource has changed since.
Common causes
- Resource changed since the client fetched it
- Stale ETag in If-Match / If-Unmodified-Since
How to fix it
- Re-fetch the resource to get the current ETag, re-apply the change and retry
Defined in: RFC 9110 §15.5.13 · Link to 412
413Content Too LargeThe request body is bigger than the server allows.
Previously called "Payload Too Large" (and before that "Request Entity Too Large"). Common when uploading files.
Common causes
- Upload exceeds nginx client_max_body_size (default 1 MB)
- PHP upload_max_filesize / post_max_size too small
- CDN or proxy body-size limits
How to fix it
- Upload a smaller file or compress it
- Server owners: raise client_max_body_size, LimitRequestBody or the PHP limits
Defined in: RFC 9110 §15.5.14 · Link to 413
414URI Too LongThe URL is longer than the server will process.
Usually caused by sending large amounts of data in the query string or by a redirect loop that keeps appending parameters.
Common causes
- Huge query string (e.g. a GET form with lots of data)
- Redirect loop appending parameters
How to fix it
- Send large data in a POST body instead
- Fix redirect rules that keep growing the URL
Defined in: RFC 9110 §15.5.15 · Link to 414
415Unsupported Media TypeThe server doesn't accept the request body's format.
The Content-Type (or Content-Encoding) of the request isn't supported by this endpoint.
Common causes
- Sending JSON without Content-Type: application/json
- Uploading a file type the endpoint doesn't accept
How to fix it
- Set the correct Content-Type header
- Convert the data to a format the API expects
Defined in: RFC 9110 §15.5.16 · Link to 415
416Range Not SatisfiableThe requested byte range is outside the file.
The Range header asked for bytes that don't exist — usually because the file changed or got smaller since a download started.
Common causes
- Resuming a download of a file that has changed
- Buggy download manager or media player
How to fix it
- Restart the download from the beginning
- Clear the browser or app cache
Defined in: RFC 9110 §15.5.17 · Link to 416
417Expectation FailedThe server can't meet the Expect request header.
Usually the server or a proxy doesn't support Expect: 100-continue.
Common causes
- Client sends Expect: 100-continue to a server or proxy that rejects it
How to fix it
- Remove the Expect header from the request (e.g. curl -H 'Expect:')
Defined in: RFC 9110 §15.5.18 · Link to 417
418I'm a teapotA joke code: the server refuses to brew coffee because it's a teapot.
From an April Fools' RFC about coffee pots. It isn't a real HTTP status, but it's so widely implemented that RFC 9110 reserves 418 so nobody reuses it. Some sites return it to bots they want to turn away.
Common causes
- An Easter egg in a framework or API
- A site deliberately refusing automated requests
How to fix it
- Nothing to fix — if you see it on a real site, you're probably being blocked as a bot
Defined in: RFC 2324 (HTCPCP, April Fools' joke); reserved as (Unused) in RFC 9110 §15.5.19 · Link to 418
421Misdirected RequestThe request went to a server that can't answer for this host.
Happens with HTTP/2 or HTTP/3 connection reuse: the browser reused a connection for a different hostname covered by the same certificate, but that server isn't configured for it.
Common causes
- Shared certificate across hosts on different servers
- Inconsistent TLS/SNI configuration between virtual hosts
How to fix it
- Make every host on the certificate servable from each server, or use separate certificates
- Align TLS settings across virtual hosts
Defined in: RFC 9110 §15.5.20 · Link to 421
422Unprocessable ContentThe request is well-formed but contains invalid data.
Formerly "Unprocessable Entity". The syntax is correct but the content fails validation — popular with REST APIs and frameworks like Rails and Laravel for form validation errors.
Common causes
- Validation errors: missing required fields, invalid email, value out of range
How to fix it
- Read the error details in the response body and correct the submitted data
Defined in: RFC 9110 §15.5.21 (originally RFC 4918) · Link to 422
423LockedThe resource is locked.
A WebDAV code meaning someone else holds a lock on the file or folder.
Common causes
- File opened for editing by another user or process
How to fix it
- Wait for the lock to be released or ask the lock owner to close the file
Defined in: RFC 4918 (WebDAV) · Link to 423
424Failed DependencyThe request failed because another action it depended on failed.
A WebDAV code used inside multi-step operations: one part failed, so the dependent part couldn't run.
Common causes
- An earlier operation in the same request failed
How to fix it
- Fix the first failing operation, then retry
Defined in: RFC 4918 (WebDAV) · Link to 424
425Too EarlyThe server won't process a request that might be replayed.
Related to TLS 1.3 early data (0-RTT): requests sent before the handshake completes can be replayed by an attacker, so the server asks the client to retry after the handshake.
Common causes
- Non-idempotent request sent as TLS 1.3 early data
How to fix it
- Clients retry automatically after the handshake; servers can disable 0-RTT for sensitive endpoints
Defined in: RFC 8470 · Link to 425
426Upgrade RequiredThe client must switch to a different protocol.
The server refuses the request with the current protocol and names the required one in an Upgrade header — for example requiring TLS or a newer HTTP version.
Common causes
- Endpoint requires a newer protocol (e.g. HTTP/2, WebSocket or TLS)
How to fix it
- Update the client to use the protocol named in the Upgrade header
Defined in: RFC 9110 §15.5.22 · Link to 426
428Precondition RequiredThe server requires the request to be conditional.
Protects against lost updates: the server insists on an If-Match header so clients can't overwrite changes they haven't seen.
Common causes
- Update sent without If-Match / ETag
How to fix it
- Fetch the resource, then send the update with If-Match set to its ETag
Defined in: RFC 6585 · Link to 428
429Too Many RequestsThe client has sent too many requests in a given time (rate limiting).
The server may include a Retry-After header saying how long to wait.
Common causes
- API rate limit or quota exceeded
- Aggressive scraping or bots
- Brute-force protection on login forms
- Shared IP (VPN, office, CGNAT) used by many people
How to fix it
- Wait for the time in Retry-After and slow down
- Add exponential backoff and caching in your client
- Request a higher limit or use an authenticated plan
SEO impact: If Googlebot gets 429s it slows its crawling. Persistent 429s on important pages can lead to them dropping from the index — don't rate-limit verified search engine crawlers too tightly.
Defined in: RFC 6585 · Link to 429
431Request Header Fields Too LargeThe request headers are too big.
Either one header or all headers together exceed the server's limit — almost always because of too many or too-large cookies.
Common causes
- Huge or numerous cookies for the domain
- Very long Referer or Authorization header
How to fix it
- Clear the site's cookies
- Developers: store less in cookies, or raise the server's header buffer limit
Defined in: RFC 6585 · Link to 431
451Unavailable For Legal ReasonsThe resource can't be shown for legal reasons.
Used when content is blocked due to a court order, government censorship or regional law (for example GDPR geo-blocking). The number is a nod to the novel Fahrenheit 451.
Common causes
- Court order or takedown
- Content blocked in your country
How to fix it
- Nothing to fix technically; the response may link to the legal demand
SEO impact: Treated as not available — the page won't be indexed in affected regions.
Defined in: RFC 7725 · Link to 451
5xx Server error
The server failed to fulfil a request that appears valid.
500Internal Server ErrorSomething went wrong on the server and it has no more specific error.
A catch-all for unhandled errors in the application or server configuration. The real cause is in the server's error logs.
Common causes
- Bug or uncaught exception in application code
- Syntax error in .htaccess or server config
- Wrong file permissions on scripts
- PHP memory limit or fatal error
- Failed database query or connection
How to fix it
- Check the web server and application error logs
- Undo the most recent deploy, plugin install or config change
- On WordPress: disable plugins and switch to a default theme to find the culprit
- Increase memory/time limits if the logs show they were hit
SEO impact: Occasional 500s are tolerated, but if they persist Googlebot slows crawling and eventually drops the affected URLs.
Defined in: RFC 9110 §15.6.1 · Link to 500
501Not ImplementedThe server doesn't support the functionality needed for this request.
Usually the server doesn't recognise the HTTP method at all (unlike 405, where the method is known but not allowed on this URL).
Common causes
- Uncommon or custom HTTP method
- Feature not built yet on an API
How to fix it
- Use a standard method the server supports
- Check the API documentation
Defined in: RFC 9110 §15.6.2 · Link to 501
502Bad GatewayA proxy or gateway got an invalid response from the upstream server.
Something between you and the application — a load balancer, reverse proxy (nginx) or CDN — tried to reach the backend and got nonsense or a closed connection.
Common causes
- Application server (PHP-FPM, Node, Gunicorn) crashed or isn't running
- Backend overloaded and dropping connections
- Wrong upstream address or port in the proxy config
- Firewall blocking the proxy from the backend
How to fix it
- Restart the application server and check its logs
- Verify the proxy's upstream host/port
- Check resource limits (memory, worker count)
- Visitors: wait a minute and reload
SEO impact: Treated like other 5xx: short outages are fine; persistent errors reduce crawling and can drop pages.
Defined in: RFC 9110 §15.6.3 · Link to 502
503Service UnavailableThe server is temporarily unable to handle the request.
Overload or planned maintenance. The server can send a Retry-After header to say when to try again.
Common causes
- Maintenance mode
- Server overloaded or out of workers
- Application pool stopped (IIS)
- Upstream dependency down
How to fix it
- Check whether maintenance mode is still on
- Scale up or add caching for traffic spikes
- Send Retry-After during planned downtime
SEO impact: The right status for planned maintenance: return 503 with a Retry-After header and Google will come back later without dropping pages. Don't serve a maintenance page with 200, and don't keep 503 for more than a day or two.
Defined in: RFC 9110 §15.6.4 · Link to 503
504Gateway TimeoutA proxy or gateway didn't get a response from the upstream server in time.
The backend is reachable but too slow: the load balancer, reverse proxy or CDN gave up waiting.
Common causes
- Slow database queries or external API calls
- Long-running scripts (imports, reports) on a web request
- Proxy timeout set lower than the app needs
- Backend overloaded
How to fix it
- Optimise slow queries and add caching
- Move long jobs to a background queue
- Raise proxy timeouts (e.g. nginx proxy_read_timeout) if appropriate
Defined in: RFC 9110 §15.6.5 · Link to 504
505HTTP Version Not SupportedThe server doesn't support the HTTP version used in the request.
Rare today. Usually indicates a malformed request line or a very old or misconfigured server.
Common causes
- Malformed request line
- Client forcing an HTTP version the server doesn't support
How to fix it
- Use HTTP/1.1 or let the client negotiate the version
Defined in: RFC 9110 §15.6.6 · Link to 505
506Variant Also NegotiatesThe server's content-negotiation configuration is broken.
Transparent content negotiation led to a circular reference: the chosen variant is itself configured to negotiate.
Common causes
- Misconfigured content negotiation (e.g. Apache type maps)
How to fix it
- Fix the server's negotiation/variant configuration
Defined in: RFC 2295 · Link to 506
507Insufficient StorageThe server can't store what's needed to complete the request.
A WebDAV code, also used by some hosting control panels, when the disk or quota is full.
Common causes
- Disk full or storage quota exceeded
How to fix it
- Free up disk space or increase the quota
Defined in: RFC 4918 (WebDAV) · Link to 507
508Loop DetectedThe server found an infinite loop while processing the request.
A WebDAV code for loops in bindings with Depth: infinity. Some hosts (e.g. LiteSpeed/CloudLinux) misuse 508 for "resource limit reached".
Common causes
- Circular WebDAV bindings
- On shared hosting: CPU/process limits hit (non-standard use)
How to fix it
- Fix the binding loop
- On shared hosting: reduce load or upgrade the plan
Defined in: RFC 5842 (WebDAV) · Link to 508
510Not ExtendedFurther extensions to the request are required.
From the HTTP Extension Framework, which was never widely adopted; the RFC now has Historic status.
Common causes
- Request is missing a mandatory extension declaration
How to fix it
- Add the extension the server requires (rarely seen in practice)
Defined in: RFC 2774 (Historic) · Link to 510
511Network Authentication RequiredYou must log in to the network before you can browse.
Sent by captive portals (hotel, airport and café Wi-Fi) that intercept traffic until you accept terms or log in.
Common causes
- Captive portal on public Wi-Fi
How to fix it
- Open any http:// page in the browser to bring up the Wi-Fi login page and sign in
Defined in: RFC 6585 · Link to 511
Unofficial
Non-standard codes used by specific servers, CDNs and frameworks. Not defined by an RFC.
419Page Expired UnofficialLaravel: the CSRF token is missing or expired.
Laravel returns 419 when a form is submitted with an invalid or expired CSRF token, usually because the session timed out.
Common causes
- Form left open longer than the session lifetime
- Missing @csrf in the form
- Session/cookie domain misconfiguration
How to fix it
- Reload the page and submit again
- Developers: include @csrf and check SESSION_DOMAIN and cookie settings
Defined in: Laravel framework · Link to 419
420Enhance Your Calm UnofficialOld Twitter API rate-limit code.
Twitter's original Search and Trends API returned 420 when clients were rate-limited. It now uses the standard 429. Spring Framework once used 420 for "Method Failure" (deprecated).
Common causes
- Rate-limited by a legacy API
How to fix it
- Slow down requests; modern APIs use 429 instead
Defined in: Twitter API v1 (historic); Spring Framework used 420 for "Method Failure" · Link to 420
440Login Time-out UnofficialIIS: the client's session has expired and they must log in again.
Used by Microsoft IIS and Exchange (Outlook Web Access) when a session times out.
Common causes
- Session expired
How to fix it
- Log in again
Defined in: Microsoft IIS · Link to 440
444No Response Unofficialnginx: the server closed the connection without sending anything.
Used only inside nginx config (return 444;) to drop unwanted requests such as bots or requests to an unknown host. The client never actually receives a 444 — it sees an empty reply or connection reset, and 444 appears in the server's access log.
Common causes
- nginx rule deliberately dropping the request (blocked bot, invalid Host header)
How to fix it
- Server owners: review the nginx rule returning 444; visitors can't fix it
Defined in: nginx · Link to 444
494Request Header Too Large Unofficialnginx: the request headers or a header line are too large.
nginx's internal code before it sends a 400 Bad Request — "Request Header Or Cookie Too Large".
Common causes
- Oversized cookies
- large_client_header_buffers too small
How to fix it
- Clear cookies
- Raise large_client_header_buffers in nginx
Defined in: nginx · Link to 494
495SSL Certificate Error Unofficialnginx: the client certificate is invalid.
Logged when mutual TLS (client certificate authentication) is enabled and the client sent a certificate that failed verification.
Common causes
- Client certificate expired, revoked or signed by an untrusted CA
How to fix it
- Install a valid client certificate
Defined in: nginx · Link to 495
496SSL Certificate Required Unofficialnginx: a client certificate is required but wasn't sent.
Used with mutual TLS when ssl_verify_client is on and the client didn't present a certificate.
Common causes
- Client certificate missing
How to fix it
- Configure the client to send its certificate
Defined in: nginx · Link to 496
497HTTP Request Sent to HTTPS Port Unofficialnginx: a plain HTTP request was sent to the HTTPS port.
Happens when someone requests http://example.com:443. Often handled with error_page 497 to redirect to https.
Common causes
- URL uses http:// with the HTTPS port
How to fix it
- Use https://
- Server owners: add error_page 497 =301 https://$host$request_uri;
Defined in: nginx · Link to 497
498Invalid Token UnofficialArcGIS: the access token is expired or invalid.
Returned by Esri's ArcGIS Server when a token is invalid or has expired.
Common causes
- Expired or malformed ArcGIS token
How to fix it
- Generate a new token
Defined in: Esri ArcGIS Server · Link to 498
499Client Closed Request Unofficialnginx: the client closed the connection before the server replied.
Appears in nginx logs when the visitor (or an upstream load balancer) gave up waiting — often a symptom of slow backend responses.
Common causes
- User navigated away or pressed stop
- Client or load balancer timeout shorter than the backend's response time
How to fix it
- Speed up slow endpoints
- Align load balancer and client timeouts with backend response times
Defined in: nginx · Link to 499
509Bandwidth Limit Exceeded UnofficialThe hosting account has used up its bandwidth allowance.
Returned by shared hosting (cPanel, Apache bandwidth modules) when the site exceeds its monthly or per-period transfer limit.
Common causes
- Traffic spike or hotlinked large files on a capped hosting plan
How to fix it
- Upgrade the hosting plan or wait for the limit to reset
- Use a CDN and block hotlinking
Defined in: Apache / cPanel hosting · Link to 509
520Web Server Returned an Unknown Error UnofficialCloudflare: the origin server returned an empty, unknown or unexpected response.
Cloudflare connected to your server but got something it couldn't use — e.g. an empty reply, a crash mid-response or oversized headers.
Common causes
- Origin crashed or reset the connection
- Response headers too large (over Cloudflare's limit)
- Firewall on the origin blocking Cloudflare IPs
How to fix it
- Check the origin server's error logs
- Allow-list Cloudflare IP ranges
- Reduce cookie/header size
Defined in: Cloudflare · Link to 520
521Web Server Is Down UnofficialCloudflare: the origin server refused the connection.
Cloudflare tried to connect to your server and the connection was refused.
Common causes
- Web server (nginx/Apache) stopped
- Firewall blocking Cloudflare IPs
How to fix it
- Start the web server
- Allow Cloudflare IP ranges in the firewall
Defined in: Cloudflare · Link to 521
522Connection Timed Out UnofficialCloudflare: the TCP connection to the origin timed out.
Cloudflare couldn't complete a TCP handshake with your server in time.
Common causes
- Origin overloaded or offline
- Firewall silently dropping Cloudflare traffic
- Wrong origin IP in DNS
How to fix it
- Check the server is online and not overloaded
- Verify the DNS A/AAAA records in Cloudflare
- Allow Cloudflare IPs
Defined in: Cloudflare · Link to 522
523Origin Is Unreachable UnofficialCloudflare: it can't route to the origin server.
Usually a DNS or routing problem between Cloudflare and the origin.
Common causes
- Wrong origin IP address in Cloudflare DNS
- Routing problems at the hosting provider
How to fix it
- Correct the DNS records
- Contact the hosting provider
Defined in: Cloudflare · Link to 523
524A Timeout Occurred UnofficialCloudflare: it connected to the origin but got no response within 100 seconds.
The connection succeeded, but the origin took longer than Cloudflare's timeout (100 s by default) to send the response.
Common causes
- Long-running request (imports, reports)
- Slow database or overloaded origin
How to fix it
- Move long tasks to background jobs
- Optimise the slow endpoint
- Enterprise plans can raise the timeout
Defined in: Cloudflare · Link to 524
525SSL Handshake Failed UnofficialCloudflare: the TLS handshake with the origin failed.
With SSL mode Full or Full (strict), Cloudflare couldn't negotiate TLS with your server.
Common causes
- No SSL certificate installed on the origin
- No common TLS version or cipher
- Origin not listening on port 443
How to fix it
- Install a certificate on the origin (a free Cloudflare Origin CA certificate works)
- Enable TLS 1.2+ and modern ciphers
Defined in: Cloudflare · Link to 525
526Invalid SSL Certificate UnofficialCloudflare: the origin's certificate failed validation.
In Full (strict) mode the origin must present a valid certificate for the hostname; it didn't.
Common causes
- Expired or self-signed origin certificate
- Certificate doesn't cover the hostname
How to fix it
- Renew or replace the origin certificate
- Use a Cloudflare Origin CA certificate
Defined in: Cloudflare · Link to 526
527Railgun Error UnofficialCloudflare: connection problem with the Railgun listener.
Railgun was a Cloudflare WAN optimiser that has been discontinued, so this code is now mostly historical.
Common causes
- Railgun listener down or unreachable
How to fix it
- Railgun is discontinued — remove it from the setup
Defined in: Cloudflare (deprecated) · Link to 527
530Origin DNS Error / Site Frozen UnofficialCloudflare: returned together with a 1xxx error; Pantheon: the site is frozen.
On Cloudflare, 530 accompanies a 1xxx error (such as 1016 Origin DNS error) — the 1xxx code in the page explains the actual problem. Pantheon uses 530 for sites that have been frozen due to inactivity.
Common causes
- Cloudflare can't resolve the origin hostname (error 1016)
- Pantheon site frozen
How to fix it
- Look up the 1xxx error number shown on the page and fix the DNS/origin settings
- Pantheon: unfreeze the site in the dashboard
Defined in: Cloudflare; Pantheon · Link to 530
598Network Read Timeout Error UnofficialA proxy timed out reading the response from the upstream server.
Not defined by any standard; some proxies and client libraries use it to signal a read timeout behind a proxy.
Common causes
- Slow upstream server behind a proxy
How to fix it
- Investigate the upstream server's performance or raise the proxy read timeout
Defined in: Informal convention (some HTTP proxies) · Link to 598
599Network Connect Timeout Error UnofficialA proxy or client timed out connecting to the server.
Not defined by any standard; used by some proxies and HTTP client libraries for a connect timeout.
Common causes
- Server unreachable or firewalled
- Network problems between proxy and server
How to fix it
- Check the server is reachable and the firewall allows the connection
Defined in: Informal convention (some HTTP proxies and clients) · Link to 599
How to use the HTTP Status Code Lookup
- Type a code (like 404), a class (like 5xx) or words (like timeout) into the search box.
- Or filter by category with the chips: 1xx, 2xx, 3xx, 4xx, 5xx or unofficial.
- Click a code to expand its full explanation, causes, fixes and SEO notes.
- Copy the page URL to share a direct link to that code — it ends in #code, e.g. #503.
Frequently asked questions
What are the five classes of HTTP status codes?
1xx informational, 2xx success, 3xx redirection, 4xx client errors and 5xx server errors. The first digit tells you the class; clients that don't recognise a specific code treat it like the x00 code of its class.
What is the difference between 404 and 410?
404 Not Found says nothing is at the URL, without saying whether that's permanent. 410 Gone says the resource existed and was removed for good. Both get pages dropped from Google's index; 410 can be slightly faster.
Should I use 301 or 302 for a redirect?
Use 301 (or 308) when the move is permanent, such as switching to HTTPS or changing a URL slug — search engines then index the new URL. Use 302 (or 307) only for genuinely temporary moves.
Which status code should a site return during maintenance?
503 Service Unavailable with a Retry-After header. Search engines then know the outage is temporary and come back later instead of dropping your pages.
What is the difference between 401 and 403?
401 Unauthorized means you're not authenticated — log in and try again. 403 Forbidden means the server knows who you are (or doesn't care) and still won't allow access.
Are codes like 499 or 520 official?
No. 499 and 444 are nginx-specific, 520–527 are Cloudflare errors and 419 comes from Laravel. They're widely seen but not defined in an RFC, so they're marked Unofficial here.