Code and data

HTTP status codes

Look up any HTTP status code to see what it means, why it happens, how to fix it and whether a retry can help, including Cloudflare's 52x codes and other unofficial ones.

CodeName
100Continue
101Switching Protocols
102Processing
103Early Hints
104Upload Resumption Supported
200OK
201Created
202Accepted
203Non-Authoritative Information
204No Content
205Reset Content
206Partial Content
207Multi-Status
208Already Reported
226IM Used
300Multiple Choices
301Moved Permanently
302Found
303See Other
304Not Modified
305Use Proxy
306(Unused)
307Temporary Redirect
308Permanent Redirect
400Bad Request
401Unauthorized
402Payment Required
403Forbidden
404Not Found
405Method Not Allowed
406Not Acceptable
407Proxy Authentication Required
408Request Timeout
409Conflict
410Gone
411Length Required
412Precondition Failed
413Content Too Large
414URI Too Long
415Unsupported Media Type
416Range Not Satisfiable
417Expectation Failed
418(Unused) I'm a teapot
419Page Expired Laravel
420Enhance Your Calm old Twitter API
421Misdirected Request
422Unprocessable Content
423Locked
424Failed Dependency
425Too Early
426Upgrade Required
428Precondition Required
429Too Many Requests
431Request Header Fields Too Large
440Login Time-out Microsoft IIS
444No Response nginx
449Retry With Microsoft IIS
450Blocked by Windows Parental Controls Microsoft
451Unavailable For Legal Reasons
460Client closed connection AWS Elastic Load Balancing
463Too many forwarded IPs AWS Elastic Load Balancing
494Request header too large nginx
495SSL Certificate Error nginx
496SSL Certificate Required nginx
497HTTP Request Sent to HTTPS Port nginx
499Client Closed Request nginx
500Internal Server Error
501Not Implemented
502Bad Gateway
503Service Unavailable
504Gateway Timeout
505HTTP Version Not Supported
506Variant Also Negotiates
507Insufficient Storage
508Loop Detected
509Bandwidth Limit Exceeded cPanel and Apache modules
510Not Extended
511Network Authentication Required
520Web Server Returns an Unknown Error Cloudflare
521Web Server Is Down Cloudflare
522Connection Timed Out Cloudflare
523Origin Is Unreachable Cloudflare
524A Timeout Occurred Cloudflare
525SSL Handshake Failed Cloudflare
526Invalid SSL Certificate Cloudflare
527Railgun Error Cloudflare (retired)
530Cloudflare 1xxx error Cloudflare
561Unauthorized AWS Elastic Load Balancing
598Network read timeout some proxies
599Network connect timeout some proxies

Runs in your browser. Nothing you type or open is uploaded. Free to use, no account. More code and data tools

How to read a status code

  1. Find the code in the table above, by number or by a word such as timeout or redirect, and open its entry.
  2. The first digit tells you who should act: 2xx worked, 3xx means follow a redirect, 4xx means the request must change, 5xx means the server failed.
  3. Read the causes and the fix, then the retry advice: some codes are safe to retry, others will fail the same way every time.
  4. Codes marked Unofficial come from one product, such as Cloudflare or nginx, not from an HTTP specification. Their meaning only holds for that product.

1xx informational

Interim responses: the request was received and processing continues.

100 Continue

RFC 9110

The server got the request headers and the client may send the body. Used with Expect: 100-continue so a large upload isn't sent to a server that would refuse it.

Common causes

  • The client sent Expect: 100-continue before a large body (curl does this for big uploads)

What to do: Nothing to fix. If a proxy mishandles it, have curl send an empty Expect: header.

101 Switching Protocols

RFC 9110

The server agrees to switch protocols on this connection, most often to WebSocket after an Upgrade request.

Common causes

  • A WebSocket handshake (Upgrade: websocket)

What to do: If WebSockets fail behind a proxy, make sure it forwards the Upgrade and Connection headers.

102 Processing

RFC 2518 (WebDAV, deprecated)

An interim response saying the server is still working. Removed from later WebDAV specifications and rarely seen today.

Common causes

  • Old WebDAV servers on long operations

What to do: Nothing to fix; clients may ignore it.

103 Early Hints

RFC 8297

An interim response with Link headers so the browser can preload or preconnect while the server prepares the final response.

Common causes

  • A server or CDN that sends early hints for CSS, fonts or origins

What to do: Only list resources the page certainly needs; wrong hints waste bandwidth.

104 Upload Resumption Supported

IETF draft (temporary IANA registration)

An interim response from the resumable uploads draft (draft-ietf-httpbis-resumable-upload): the server can resume this upload, and its Location header gives the URL to resume at if the connection drops. IANA's registration is temporary until the draft is finished.

Common causes

  • A client and server that both implement resumable uploads, such as recent Apple platforms' URLSession

What to do: Nothing to fix. Clients that don't know the code ignore it, as with any 1xx response.

2xx success

The request was received, understood and accepted.

200 OK

RFC 9110Cacheable by defaultAPNs

The request succeeded. The body holds the result: the page for a GET, the outcome of the action for a POST.

Common causes

  • Normal success

What to do: If an API returns 200 with an error message in the body, consider a proper 4xx or 5xx so clients and monitors can tell.

201 Created

RFC 9110

A new resource was created. The Location header should point to it.

Common causes

  • A successful POST (or PUT) that created something

What to do: Return Location and, usually, the created resource.

202 Accepted

RFC 9110

The request was accepted for processing that hasn't finished. Nothing guarantees it will succeed.

Common causes

  • Queued or asynchronous jobs

What to do: Give the client a way to check progress, such as a status URL in Location.

203 Non-Authoritative Information

RFC 9110Cacheable by default

Success, but a proxy changed the response the origin sent.

Common causes

  • A transforming proxy

What to do: Rare; nothing to fix unless the change is unwanted.

204 No Content

RFC 9110Cacheable by default

Success with no body. Common for DELETE, for PUT that returns nothing and for CORS preflight responses.

Common causes

  • The server has nothing to return

What to do: Don't send a body with 204; some clients hang or error if you do.

205 Reset Content

RFC 9110

Success; the client should reset the form or view that sent the request.

Common causes

  • Rare in practice

What to do: Nothing to fix.

206 Partial Content

RFC 9110Cacheable by default

The body holds only the requested byte ranges (Range header). Used by video players, resumable downloads and PDF viewers.

Common causes

  • A Range request the server honoured

What to do: Send Accept-Ranges: bytes and correct Content-Range headers, or seeking in media breaks (Safari is strict).

207 Multi-Status

RFC 4918 (WebDAV)

A WebDAV response with a separate status for each of several resources in an XML body.

Common causes

  • WebDAV operations on collections

What to do: Read each status in the body.

208 Already Reported

RFC 5842 (WebDAV)

Inside a 207 response: members of this binding were already listed and aren't repeated.

Common causes

  • WebDAV bindings

What to do: Nothing to fix.

226 IM Used

RFC 3229

The server applied instance manipulations (delta encoding) to the response.

Common causes

  • Delta encoding, rarely deployed

What to do: Nothing to fix.

3xx redirection

The client must take another step, usually follow the Location header.

300 Multiple Choices

RFC 9110Cacheable by default

Several representations are available and the server didn't pick one.

Common causes

  • Rare; some content negotiation setups

What to do: Prefer redirecting to one choice.

301 Moved Permanently

RFC 9110Cacheable by default

The resource has a new permanent URL, given in Location. Search engines move ranking signals to the new URL. Browsers may change a POST into a GET when following it.

Common causes

  • A changed URL, a domain move, http to https, trailing-slash rules

What to do: Redirect straight to the final URL (no chains), and use 308 when a POST must stay a POST.

302 Found

RFC 9110

A temporary redirect to the URL in Location. Browsers usually follow it with GET.

Common causes

  • Login redirects, A/B tests, temporary maintenance pages

What to do: Use 301 or 308 for permanent moves so search engines update; use 307 if the method must not change.

303 See Other

RFC 9110

Look at another URL with GET. The standard answer after a form POST, so a reload doesn't resubmit the form.

Common causes

  • Post/Redirect/Get pattern

What to do: Nothing to fix.

304 Not Modified

RFC 9110

The cached copy is still valid (the request carried If-None-Match or If-Modified-Since). No body is sent.

Common causes

  • Normal revalidation of cached files

What to do: If changes don't show, check that the ETag or Last-Modified changes when the file does, or use versioned file names.

305 Use Proxy

RFC 9110 (deprecated)

Deprecated for security reasons; clients ignore it.

Common causes

  • Very old servers

What to do: Don't use it.

306 (Unused)

RFC 9110 (reserved)

Reserved. It was "Switch Proxy" in a draft and is no longer used.

Common causes

  • Nothing current

What to do: Don't use it.

307 Temporary Redirect

RFC 9110

A temporary redirect that keeps the method and body: a POST stays a POST. Browsers also show 307 internally for HSTS upgrades to https.

Common causes

  • Temporary moves of API endpoints; HSTS (an "internal redirect" in DevTools)

What to do: Nothing to fix for HSTS; for real moves, decide between temporary (307) and permanent (308).

308 Permanent Redirect

RFC 9110Cacheable by default

A permanent redirect that keeps the method and body. The safe choice for permanently moved API endpoints.

Common causes

  • Permanent URL changes where POST must stay POST

What to do: Update clients to the new URL; keep the redirect for old ones.

4xx client errors

Something in the request is wrong. Fix it before trying again.

400 Bad Request

RFC 9110APNs

The server can't process the request because something in it is malformed: syntax, framing, parameters or a too-large cookie.

Common causes

  • Invalid JSON or form data
  • A missing or wrong Content-Type
  • Oversized or corrupted cookies
  • Bad characters in the URL

What to do: Read the error body, validate the payload, check Content-Type, and clear the site's cookies if a browser shows it.

Retry: Don't retry unchanged: fix the request first.

From Apple's push service, the JSON body's reason says more: see APNs error codes.

401 Unauthorized

RFC 9110

Authentication is missing or invalid. Despite the name, it means unauthenticated; the server must send WWW-Authenticate.

Common causes

  • No Authorization header
  • An expired or malformed token
  • A wrong API key

What to do: Send valid credentials; refresh an expired token and retry once.

Retry: Retry once after refreshing credentials; otherwise don't.

402 Payment Required

RFC 9110 (reserved)

Reserved for future use. Some APIs return it when a plan's quota or billing has run out.

Common causes

  • An unpaid account or exhausted quota at some providers

What to do: Check the provider's billing page.

Retry: Don't retry unchanged: fix the request first.

403 Forbidden

RFC 9110APNs

The server understood who you are (or doesn't care) and refuses. Re-authenticating won't help.

Common causes

  • Missing permissions
  • IP blocks, WAF or bot protection rules
  • File permissions on the server
  • Directory listing disabled

What to do: Check the account's permissions, the WAF or firewall logs, and file ownership on the server.

Retry: Don't retry unchanged: fix the request first.

From Apple's push service, the JSON body's reason says more: see APNs error codes.

404 Not Found

RFC 9110Cacheable by defaultAPNs

No resource at this URL, or the server won't say whether one exists. Cacheable by default.

Common causes

  • A typo or a deleted page
  • A missing route or rewrite rule
  • Wrong base path or case on a case-sensitive server

What to do: Fix the link, or redirect a moved page with 301. For content removed for good, 410 Gone says so explicitly.

Retry: Don't retry unchanged: fix the request first.

From Apple's push service, the JSON body's reason says more: see APNs error codes.

405 Method Not Allowed

RFC 9110Cacheable by defaultAPNs

The URL exists but doesn't accept this method. The Allow header lists those it does.

Common causes

  • POST to a static file
  • A route defined only for GET
  • A CORS preflight (OPTIONS) the server doesn't handle

What to do: Use an allowed method, or add the method or the OPTIONS handler on the server.

Retry: Don't retry unchanged: fix the request first.

From Apple's push service, the JSON body's reason says more: see APNs error codes.

406 Not Acceptable

RFC 9110

The server can't produce a representation matching the Accept headers.

Common causes

  • An Accept header the API doesn't support

What to do: Send Accept: application/json (or */*).

Retry: Don't retry unchanged: fix the request first.

407 Proxy Authentication Required

RFC 9110

Like 401, but a proxy between you and the server wants credentials.

Common causes

  • A corporate proxy

What to do: Configure the proxy credentials in the client.

Retry: Don't retry unchanged: fix the request first.

408 Request Timeout

RFC 9110

The server gave up waiting for the client to finish sending the request, and usually closes the connection.

Common causes

  • A slow or stalled upload
  • Idle keep-alive connections that the server closed

What to do: Retrying is safe: the server didn't process the request.

Retry: Safe to retry: the request wasn't processed.

409 Conflict

RFC 9110

The request conflicts with the current state of the resource.

Common causes

  • Edit conflicts
  • Creating something that already exists
  • Version mismatches

What to do: Fetch the current state, resolve the conflict and send again.

Retry: Don't retry unchanged: fix the request first.

410 Gone

RFC 9110Cacheable by defaultAPNs

The resource was deliberately removed and won't come back. Cacheable by default. APNs uses it for device tokens that are no longer active.

Common causes

  • Deleted content
  • An expired device token (APNs)

What to do: Remove links to it; for APNs, stop sending to that token.

Retry: Don't retry unchanged: fix the request first.

From Apple's push service, the JSON body's reason says more: see APNs error codes.

411 Length Required

RFC 9110

The server wants a Content-Length header.

Common causes

  • A chunked upload to a server that doesn't accept it

What to do: Send Content-Length.

Retry: Don't retry unchanged: fix the request first.

412 Precondition Failed

RFC 9110

A condition in the request (If-Match, If-Unmodified-Since) is false: someone else changed the resource.

Common causes

  • Optimistic locking

What to do: Fetch the latest version and retry with its ETag.

Retry: Don't retry unchanged: fix the request first.

413 Content Too Large

RFC 9110APNs

The request body is larger than the server allows. Formerly "Payload Too Large".

Common causes

  • Upload limits in nginx (client_max_body_size), PHP, a CDN or an API
  • APNs payloads over 4 KB (5 KB for VoIP)

What to do: Raise the limit on the server, or send less data.

Retry: Don't retry unchanged: fix the request first.

From Apple's push service, the JSON body's reason says more: see APNs error codes.

414 URI Too Long

RFC 9110Cacheable by default

The URL is longer than the server will read.

Common causes

  • Huge query strings
  • Redirect loops that keep appending parameters

What to do: Move data into a POST body; check for redirect loops.

Retry: Don't retry unchanged: fix the request first.

415 Unsupported Media Type

RFC 9110

The server doesn't accept the body's format.

Common causes

  • A wrong or missing Content-Type

What to do: Send the Content-Type the API expects, such as application/json.

Retry: Don't retry unchanged: fix the request first.

416 Range Not Satisfiable

RFC 9110

The requested byte range is outside the file.

Common causes

  • Resuming a download of a file that changed

What to do: Request the whole file again.

Retry: Don't retry unchanged: fix the request first.

417 Expectation Failed

RFC 9110

The server can't meet the Expect header.

Common causes

  • Expect: 100-continue through a server that doesn't support it

What to do: Send without the Expect header.

Retry: Don't retry unchanged: fix the request first.

418 (Unused) I'm a teapot

RFC 9110 (reserved)

An April Fools' code from RFC 2324. RFC 9110 reserves 418 so it is never given a real meaning; some servers return it as a joke or to turn away bots.

Common causes

  • Easter eggs, bot blocking

What to do: Nothing to fix unless a server uses it to block you.

Retry: Don't retry unchanged: fix the request first.

421 Misdirected Request

RFC 9110

The request reached a server that can't answer for that host, typically on a reused HTTP/2 connection.

Common causes

  • HTTP/2 connection coalescing across hosts with different certificates

What to do: Clients retry on a new connection; servers should serve the right certificate per host.

Retry: Retry on a new connection.

422 Unprocessable Content

RFC 9110

The body is well formed but its content is invalid, such as a failed validation.

Common causes

  • Validation errors in APIs

What to do: Read the error details and correct the fields.

Retry: Don't retry unchanged: fix the request first.

423 Locked

RFC 4918 (WebDAV)

The resource is locked.

Common causes

  • WebDAV locks

What to do: Wait for the lock to be released.

Retry: Don't retry unchanged: fix the request first.

424 Failed Dependency

RFC 4918 (WebDAV)

The request failed because another request it depended on failed.

Common causes

  • WebDAV batch operations

What to do: Fix the failed operation first.

Retry: Don't retry unchanged: fix the request first.

425 Too Early

RFC 8470

The server won't process a request sent as TLS early data (0-RTT), because it could be replayed.

Common causes

  • TLS 1.3 0-RTT requests

What to do: Clients retry after the handshake completes.

Retry: Retry after the TLS handshake completes.

426 Upgrade Required

RFC 9110

The server refuses this protocol; the Upgrade header names the one to use.

Common causes

  • An endpoint that requires TLS or a newer HTTP version

What to do: Switch protocol as indicated.

Retry: Don't retry unchanged: fix the request first.

428 Precondition Required

RFC 6585

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

Common causes

  • APIs with mandatory optimistic locking

What to do: Send If-Match with the current ETag.

Retry: Don't retry unchanged: fix the request first.

429 Too Many Requests

RFC 6585APNs

Rate limited: too many requests in a given time. APNs returns it when one device token gets too many pushes.

Common causes

  • API rate limits
  • Bot protection
  • Bursts from retries without backoff

What to do: Slow down, honour Retry-After, add jitter to retries and cache responses.

Retry: Wait for the Retry-After header (seconds or a date) before retrying; without one, back off exponentially.

From Apple's push service, the JSON body's reason says more: see APNs error codes.

431 Request Header Fields Too Large

RFC 6585

The headers, or one header, are too large.

Common causes

  • Too many or too big cookies
  • Huge Authorization tokens

What to do: Clear cookies for the site; trim tokens; raise server header limits.

Retry: Don't retry unchanged: fix the request first.

451 Unavailable For Legal Reasons

RFC 7725

Access is denied because of a legal demand, such as a court order or sanctions.

Common causes

  • Geo-blocking for legal reasons

What to do: Nothing to fix technically.

Retry: Don't retry unchanged: fix the request first.

5xx server errors

The server failed to handle a valid request. Often temporary.

500 Internal Server Error

RFC 9110APNs

A generic server failure: the code crashed or hit an unhandled error.

Common causes

  • Exceptions in application code
  • Misconfiguration (.htaccess errors, missing environment variables)
  • Database failures surfaced as errors

What to do: Check the server's error log for the stack trace; fix the bug or config.

Retry: Safe to retry idempotent requests (GET, PUT, DELETE) with exponential backoff; retry a POST only if it carries an idempotency key.

From Apple's push service, the JSON body's reason says more: see APNs error codes.

501 Not Implemented

RFC 9110Cacheable by default

The server doesn't support the functionality needed, such as an unknown method. Cacheable by default.

Common causes

  • Unsupported HTTP methods

What to do: Use a supported method.

Retry: Don't retry unchanged: fix the request first.

502 Bad Gateway

RFC 9110

A proxy or gateway got an invalid response from the upstream server.

Common causes

  • The app server crashed or isn't running (nginx in front of PHP-FPM, Node or Gunicorn)
  • Upstream closed the connection
  • Response headers too big for the proxy

What to do: Check that the upstream process is up and listening on the right socket or port, and read the proxy's error log.

Retry: Safe to retry idempotent requests (GET, PUT, DELETE) with exponential backoff; retry a POST only if it carries an idempotency key.

503 Service Unavailable

RFC 9110APNs

The server is temporarily unable to handle the request: overloaded or in maintenance. Search engines treat a short 503 as temporary.

Common causes

  • Maintenance mode
  • Overload or exhausted worker pools
  • Auto-scaling not caught up

What to do: Send Retry-After during maintenance; scale up or shed load.

Retry: Wait for the Retry-After header (seconds or a date) before retrying; without one, back off exponentially.

From Apple's push service, the JSON body's reason says more: see APNs error codes.

504 Gateway Timeout

RFC 9110

A proxy or gateway didn't get a response from upstream in time.

Common causes

  • Slow database queries or external APIs
  • Proxy timeouts shorter than the app's work

What to do: Speed up the slow call, move long work to a background job, or raise the proxy timeout.

Retry: Safe to retry idempotent requests (GET, PUT, DELETE) with exponential backoff; retry a POST only if it carries an idempotency key.

505 HTTP Version Not Supported

RFC 9110

The server doesn't support the HTTP version used.

Common causes

  • Old servers and very new clients

What to do: Use HTTP/1.1.

Retry: Don't retry unchanged: fix the request first.

506 Variant Also Negotiates

RFC 2295

A content negotiation configuration error on the server.

Common causes

  • Misconfigured transparent negotiation

What to do: Fix the server configuration.

Retry: Don't retry unchanged: fix the request first.

507 Insufficient Storage

RFC 4918 (WebDAV)

The server can't store what's needed to complete the request.

Common causes

  • A full disk or quota

What to do: Free space or raise the quota.

Retry: Wait for the Retry-After header (seconds or a date) before retrying; without one, back off exponentially.

508 Loop Detected

RFC 5842 (WebDAV)

The server found an infinite loop while processing. Some hosts also use it when an account hits its resource limits.

Common causes

  • WebDAV binding loops; shared-hosting process limits

What to do: Fix the loop, or ask the host about resource limits.

Retry: Don't retry unchanged: fix the request first.

510 Not Extended

RFC 2774 (historic)

Further extensions to the request are required. The extension framework is obsolete.

Common causes

  • Rare

What to do: Nothing to fix.

Retry: Don't retry unchanged: fix the request first.

511 Network Authentication Required

RFC 6585

A captive portal (hotel or airport Wi-Fi) wants you to log in before you can use the network.

Common causes

  • Captive portals

What to do: Open any page in a browser and log in to the network.

Retry: Don't retry unchanged: fix the request first.

Cloudflare 520 to 530

Cloudflare shows these when the problem is between Cloudflare and your server (the origin), not between the visitor and Cloudflare. Testing the origin directly, for example with curl and a hosts-file entry or the origin's IP, separates the two.

520 Web Server Returns an Unknown Error

Unofficial: Cloudflare

Cloudflare got an empty, unknown or unexpected response from your origin server.

Common causes

  • The origin crashed or reset the connection
  • Response headers too large or malformed
  • Empty replies from the application

What to do: Check the origin's logs at the time of the error; test the origin directly, bypassing Cloudflare; look for crashes and oversized headers or cookies.

Retry: Safe to retry idempotent requests (GET, PUT, DELETE) with exponential backoff; retry a POST only if it carries an idempotency key.

521 Web Server Is Down

Unofficial: Cloudflare

The origin refused Cloudflare's connection.

Common causes

  • The web server isn't running
  • A firewall or security plugin blocks Cloudflare's IP ranges

What to do: Start the web server; allow Cloudflare's published IP ranges in the firewall.

Retry: Safe to retry idempotent requests (GET, PUT, DELETE) with exponential backoff; retry a POST only if it carries an idempotency key.

522 Connection Timed Out

Unofficial: Cloudflare

Cloudflare couldn't complete a TCP connection to the origin in time.

Common causes

  • An overloaded origin
  • Firewall rules silently dropping Cloudflare's IPs
  • A wrong origin IP in DNS
  • Keep-alive disabled on the origin

What to do: Check the origin IP in Cloudflare DNS, allow Cloudflare's IP ranges, and check server load.

Retry: Safe to retry idempotent requests (GET, PUT, DELETE) with exponential backoff; retry a POST only if it carries an idempotency key.

523 Origin Is Unreachable

Unofficial: Cloudflare

Cloudflare can't route to the origin at all.

Common causes

  • A wrong or changed origin IP
  • Network routing problems at the host

What to do: Check the A/AAAA records in Cloudflare DNS against the server's IP; ask the host about routing.

Retry: Safe to retry idempotent requests (GET, PUT, DELETE) with exponential backoff; retry a POST only if it carries an idempotency key.

524 A Timeout Occurred

Unofficial: Cloudflare

Cloudflare connected to the origin, but the origin didn't send an HTTP response before the proxy read timeout (100 seconds by default).

Common causes

  • Long-running requests: reports, imports, exports
  • Slow database queries

What to do: Return quickly and finish long work in a background job (poll or use a webhook); Enterprise plans can raise the timeout.

Retry: Safe to retry idempotent requests (GET, PUT, DELETE) with exponential backoff; retry a POST only if it carries an idempotency key.

525 SSL Handshake Failed

Unofficial: Cloudflare

The TLS handshake between Cloudflare and the origin failed (SSL mode Full or Full strict).

Common causes

  • No certificate installed on the origin
  • The origin doesn't support SNI or the offered ciphers
  • Port 443 closed on the origin

What to do: Install a certificate on the origin (a Cloudflare Origin CA certificate works) and check that port 443 answers TLS.

Retry: Safe to retry idempotent requests (GET, PUT, DELETE) with exponential backoff; retry a POST only if it carries an idempotency key.

526 Invalid SSL Certificate

Unofficial: Cloudflare

In Full (strict) mode, the origin's certificate couldn't be validated.

Common causes

  • Expired or self-signed certificate
  • Hostname not covered by the certificate
  • Missing intermediate certificates

What to do: Renew or replace the origin certificate, or use a Cloudflare Origin CA certificate.

Retry: Don't retry unchanged: fix the request first.

527 Railgun Error

Unofficial: Cloudflare (retired)

A connection error with Cloudflare's Railgun service, which has been retired.

Common causes

  • Legacy Railgun setups

What to do: Remove the Railgun configuration.

Retry: Don't retry unchanged: fix the request first.

530 Cloudflare 1xxx error

Unofficial: Cloudflare

Has no official name. Returned together with a Cloudflare 1xxx error, such as 1016 (origin DNS error) or 1033 (Cloudflare Tunnel error). The page shows the 1xxx number.

Common causes

  • The origin hostname doesn't resolve
  • A Cloudflare Tunnel isn't connected

What to do: Look up the 1xxx error shown on the page; fix the DNS record or restart the tunnel.

Retry: Safe to retry idempotent requests (GET, PUT, DELETE) with exponential backoff; retry a POST only if it carries an idempotency key.

Other unofficial codes

Servers, frameworks and load balancers that invented their own numbers. Some, like nginx's 499, appear only in logs and are never sent to clients.

419 Page Expired

Unofficial: Laravel

Laravel returns it when the CSRF token in a form is missing or expired.

Common causes

  • A form left open past the session lifetime
  • Missing @csrf in the form

What to do: Reload the form; include the CSRF token; check session and cookie settings.

Retry: Don't retry unchanged: fix the request first.

420 Enhance Your Calm

Unofficial: old Twitter API

Twitter's original API returned it for rate limiting before 429 existed.

Common causes

  • Legacy clients

What to do: Treat it like 429.

Retry: Wait for the Retry-After header (seconds or a date) before retrying; without one, back off exponentially.

440 Login Time-out

Unofficial: Microsoft IIS

The client's session expired and it must log in again.

Common causes

  • Expired IIS or Exchange sessions

What to do: Log in again.

Retry: Don't retry unchanged: fix the request first.

444 No Response

Unofficial: nginx

Used in nginx configuration to close the connection without sending anything. Clients see an empty reply, not the number.

Common causes

  • return 444 rules that drop unwanted requests or bots

What to do: Check the nginx server blocks for return 444.

Retry: Don't retry unchanged: fix the request first.

449 Retry With

Unofficial: Microsoft IIS

The request should be retried after performing the indicated action.

Common causes

  • IIS extensions

What to do: Follow the server's instructions.

Retry: Don't retry unchanged: fix the request first.

450 Blocked by Windows Parental Controls

Unofficial: Microsoft

Windows parental controls blocked the page.

Common causes

  • Family safety settings

What to do: Change the parental control settings.

Retry: Don't retry unchanged: fix the request first.

460 Client closed connection

Unofficial: AWS Elastic Load Balancing

The client closed the connection before the load balancer's idle timeout ended.

Common causes

  • Client-side timeouts shorter than the backend's work

What to do: Raise the client timeout or speed up the backend.

463 Too many forwarded IPs

Unofficial: AWS Elastic Load Balancing

The load balancer got an X-Forwarded-For header with too many IP addresses (more than 30).

Common causes

  • Proxy loops that keep appending addresses

What to do: Fix the proxy chain.

Retry: Don't retry unchanged: fix the request first.

494 Request header too large

Unofficial: nginx

nginx's internal code for headers over its limit; it answers 400 to the client.

Common causes

  • Big cookies

What to do: Raise large_client_header_buffers or trim cookies.

Retry: Don't retry unchanged: fix the request first.

495 SSL Certificate Error

Unofficial: nginx

The client certificate was invalid (mutual TLS); sent to the client as 400.

Common causes

  • mTLS with a bad client certificate

What to do: Fix the client certificate.

Retry: Don't retry unchanged: fix the request first.

496 SSL Certificate Required

Unofficial: nginx

A client certificate was required but not sent; sent to the client as 400.

Common causes

  • mTLS without a client certificate

What to do: Send the client certificate.

Retry: Don't retry unchanged: fix the request first.

497 HTTP Request Sent to HTTPS Port

Unofficial: nginx

Plain HTTP arrived on a port that expects TLS; sent to the client as 400.

Common causes

  • http:// to an https-only port

What to do: Use https://, or redirect with error_page 497.

Retry: Don't retry unchanged: fix the request first.

499 Client Closed Request

Unofficial: nginx

Logged by nginx when the client closed the connection before the response was ready. The client never sees it.

Common causes

  • Users leaving the page
  • Client or load-balancer timeouts shorter than the backend's work

What to do: If frequent, speed up slow endpoints or align timeouts along the chain.

509 Bandwidth Limit Exceeded

Unofficial: cPanel and Apache modules

The hosting account exceeded its bandwidth allowance.

Common causes

  • Shared-hosting limits

What to do: Upgrade the plan or reduce traffic (images, a CDN).

Retry: Don't retry unchanged: fix the request first.

561 Unauthorized

Unofficial: AWS Elastic Load Balancing

The load balancer's authentication action (OIDC or Cognito) failed.

Common causes

  • Identity provider errors

What to do: Check the listener's authentication settings and the identity provider.

Retry: Don't retry unchanged: fix the request first.

598 Network read timeout

Unofficial: some proxies

Some HTTP proxies use it for a read timeout behind them.

Common causes

  • Proxy timeouts

What to do: Check the upstream.

Retry: Safe to retry idempotent requests (GET, PUT, DELETE) with exponential backoff; retry a POST only if it carries an idempotency key.

599 Network connect timeout

Unofficial: some proxies

Some HTTP proxies use it for a connect timeout behind them.

Common causes

  • Proxy timeouts

What to do: Check the upstream.

Retry: Safe to retry idempotent requests (GET, PUT, DELETE) with exponential backoff; retry a POST only if it carries an idempotency key.

Retries, idempotency and caching

A retry is safe when repeating the request can't do harm. GET, HEAD, PUT and DELETE are idempotent by definition, so they can be retried after 500, 502, 503 or 504 with exponential backoff and a little random jitter. POST isn't: a retried payment can charge twice unless the API supports an idempotency key. 429 and 503 often carry Retry-After, which says how long to wait.

RFC 9110 lets caches store some responses even without explicit freshness headers: 200, 203, 204, 206, 300, 301, 308, 404, 405, 410, 414 and 501. Those carry the Cacheable by default badge above. In practice, set Cache-Control yourself, especially on 404 and 301 responses that you may want to change later.

Status codes and SEO

Search engines index 2xx pages, follow 301 and 308 as permanent moves and 302 and 307 as temporary ones, drop 404 and 410 pages from the index over time (410 can be a little faster), and slow down crawling when they see 429, 500 or 503. A page that says "not found" but answers 200 is a soft 404, which wastes crawl budget. Answer with the real status code.

Private by design

Privacy

This is a reference page. The search box filters the table in your browser; this tool doesn't send what you type anywhere. Your last search and filter are kept in this browser so they are there when you come back.

This page also shows Google ads, which can use cookies. Privacy and cookies explains how.

Questions

What is the difference between 401 and 403?

401 means the request isn't authenticated: credentials are missing, expired or wrong, and sending valid ones may work. 403 means the server knows who you are, or doesn't need to, and refuses anyway: logging in again won't help.

Should I use 301 or 308 for a permanent redirect?

Both are permanent. Browsers may turn a POST into a GET when following a 301, while 308 keeps the method and body. Use 301 for pages and 308 for API endpoints that receive POST, PUT or PATCH.

What causes a 502 Bad Gateway?

A proxy such as nginx, a load balancer or a CDN got a broken response, or none, from the server behind it. Usually the application process crashed, isn't running or listens on a different port or socket. The proxy's error log names the upstream that failed.

What is Cloudflare error 524?

Cloudflare reached your server, but the server didn't start sending a response within the proxy read timeout, 100 seconds by default. Make long tasks run in the background and answer quickly, or ask about a longer timeout on an Enterprise plan.

Which HTTP errors should a client retry?

408, 429, 500, 502, 503 and 504 are worth retrying with exponential backoff, respecting Retry-After when it is present, and only for idempotent requests or requests with an idempotency key. Other 4xx errors will fail again until the request changes.

From the same developer