EasyDebug.NET

HTTP Status Code Reference

HTTP status meanings with troubleshooting hints, plus Nginx and Cloudflare codes

68 status codes

100Continue

The client should continue sending the request body.

Troubleshoot: Waiting on 100-continue can time out; drop the Expect header and send the body.

101Switching Protocols

The server agrees to switch protocols (e.g. WebSocket upgrade).

Troubleshoot: If the upgrade fails, check that the proxy forwards Upgrade and Connection headers.

102Processing

Request received, still being processed.

103Early Hints

Preliminary headers returned before the final response.

Troubleshoot: Not visible in DevTools is normal; check whether the CDN returned a response early.

200OK

The request succeeded.

201Created

The request succeeded and created a new resource.

202Accepted

Request accepted, not yet processed.

Troubleshoot: Accepted is not finished; poll the job status endpoint for the result.

203Non-Authoritative Information

Information returned from a non-authoritative copy.

204No Content

Success with no response body.

Troubleshoot: Never send a body with 204; clients and proxies treat it as a protocol error.

205Reset Content

Success; the client should reset the view.

206Partial Content

Partial content returned (Range request).

Troubleshoot: If resumable downloads fail, check Accept-Ranges and Range handling.

207Multi-Status

Multiple statuses (WebDAV).

Troubleshoot: For WebDAV, parse the per-resource status codes in the XML body.

300Multiple Choices

The resource has multiple representations.

301Moved Permanently

The resource has permanently moved to a new URL.

Troubleshoot: Watch for redirect loops; browsers cache 301 long-term, so a bad one sticks.

302Found

The resource has temporarily moved.

Troubleshoot: Do not use 302 for permanent moves; switch to 301 or 308.

303See Other

Retrieve another URI with GET.

Troubleshoot: After a form post, redirect with 303 to avoid resubmission on refresh.

304Not Modified

The cached copy is still valid.

Troubleshoot: Stale content usually means ETag or Last-Modified disagree across servers.

307Temporary Redirect

Temporary redirect preserving the request method.

Troubleshoot: If POST turns into GET you picked the wrong code; 307 preserves the method.

308Permanent Redirect

Permanent redirect preserving the request method.

Troubleshoot: A permanent redirect that keeps the method; also cached long-term if wrong.

400Bad Request

Malformed request syntax.

Troubleshoot: Check that the body parses and that Content-Type matches the actual format.

401Unauthorized

Authentication is required.

Troubleshoot: Check that credentials are sent and match the WWW-Authenticate scheme.

402Payment Required

Payment required (reserved).

403Forbidden

Authenticated but access is denied.

Troubleshoot: Separate genuine permission errors from WAF or Nginx deny rules, which also return 403.

404Not Found

The requested resource was not found.

Troubleshoot: Static 404s point to build output paths; API 404s to the route prefix.

405Method Not Allowed

The HTTP method is not allowed.

Troubleshoot: Read the Allow header; static servers often answer 405 to PUT or DELETE.

406Not Acceptable

Cannot satisfy the Accept header.

Troubleshoot: Check Accept and Accept-Language against what the server can produce.

407Proxy Authentication Required

Proxy authentication is required.

Troubleshoot: Proxy auth failure: check Proxy-Authorization and the proxy configuration.

408Request Timeout

The client request timed out.

Troubleshoot: Large uploads timing out: raise client_body_timeout and keepalive_timeout.

409Conflict

The request conflicts with the resource state.

Troubleshoot: Concurrent write conflict; retry with optimistic locking or an idempotency key.

410Gone

The resource has been permanently removed.

Troubleshoot: Only return 410 for genuinely retired URLs, then clean links and sitemaps.

411Length Required

Missing Content-Length header.

Troubleshoot: Add Content-Length, but never hand-write it when using chunked encoding.

412Precondition Failed

A precondition header check failed.

Troubleshoot: Compare If-Match and If-Unmodified-Since with the current ETag.

413Content Too Large

The request body is too large.

Troubleshoot: Raise client_max_body_size and the gateway request body limit.

414URI Too Long

The request URI is too long.

Troubleshoot: Shorten the query string or use POST; runaway length usually means redirects appending params.

415Unsupported Media Type

Unsupported media type.

Troubleshoot: Send the right Content-Type; a mismatched charset triggers this too.

416Range Not Satisfiable

The requested range is not satisfiable.

Troubleshoot: Check whether the Range exceeds the actual resource length.

417Expectation Failed

The Expect header requirement failed.

Troubleshoot: The server ignores Expect; drop the header and retry.

418I'm a teapot

Easter egg: I'm a teapot.

421Misdirected Request

The request was sent to a server that cannot respond.

Troubleshoot: Check for SNI and HTTP version mismatches and the CDN origin host.

422Unprocessable Content

Syntactically valid but semantically wrong (e.g. form validation).

Troubleshoot: A validation failure; read the field-level errors in the response body.

425Too Early

The request is too early (replay risk).

Troubleshoot: TLS 1.3 early-data replay protection; just retry later.

426Upgrade Required

A protocol upgrade is required (e.g. TLS).

Troubleshoot: When HTTPS or a protocol upgrade is enforced, check Upgrade and TLS config.

428Precondition Required

A precondition header is required.

Troubleshoot: The client must send a precondition header such as If-Match.

429Too Many Requests

Too many requests (rate limited).

Troubleshoot: Read Retry-After and review rate limits such as limit_req or gateway QPS.

431Request Header Fields Too Large

Request header fields are too large.

Troubleshoot: Trim cookies and custom headers, or raise large_client_header_buffers.

451Unavailable For Legal Reasons

Unavailable for legal reasons.

Troubleshoot: Blocked by legal or regional policy; review compliance and geo rules.

494Request Header Too LargeNginx

Nginx extension: request header too large.

Troubleshoot: Raise large_client_header_buffers, or trim cookies and custom headers.

495SSL Certificate ErrorNginx

Nginx extension: client certificate failed verification.

Troubleshoot: Check ssl_verify_client and whether the client certificate chain is complete.

496SSL Certificate RequiredNginx

Nginx extension: client certificate required but not sent.

Troubleshoot: For mutual TLS, confirm the client is configured to send its certificate.

497HTTP Request Sent to HTTPS PortNginx

Nginx extension: HTTP request sent to an HTTPS port.

Troubleshoot: Use https instead, or add error_page 497 to redirect to https.

499Client Closed RequestNginx

Nginx extension: the client closed the connection before the response.

Troubleshoot: Usually the backend was too slow; check upstream latency and timeout settings.

500Internal Server Error

Internal server error.

Troubleshoot: Read the application log first, then the upstream section of the error log.

501Not Implemented

The requested functionality is not implemented.

Troubleshoot: Check whether the feature is implemented or the method is exposed.

502Bad Gateway

The gateway received an invalid upstream response.

Troubleshoot: Check upstream liveness, port mapping, and connection pool saturation.

503Service Unavailable

Service temporarily unavailable (overloaded or maintenance).

Troubleshoot: Check backend health, rate limiting and circuit breaker state, and maintenance mode.

504Gateway Timeout

The gateway timed out waiting for upstream.

Troubleshoot: Check proxy_read_timeout and slow queries on the backend.

505HTTP Version Not Supported

The HTTP version is not supported.

Troubleshoot: Check the client HTTP version and protocol negotiation settings.

507Insufficient Storage

Insufficient storage (WebDAV).

Troubleshoot: Storage or quota exhausted; free space or expand the quota.

508Loop Detected

An infinite loop was detected (WebDAV).

Troubleshoot: A WebDAV loop; look for symlinks and rewrite rules.

511Network Authentication Required

Network authentication required (e.g. captive portal).

Troubleshoot: A captive portal login is required; verify the portal page loads.

520Web Server Returned an Unknown ErrorCloudflare

Cloudflare extension: origin returned an empty or unknown response.

Troubleshoot: Compare origin access and fetch logs to see whether the origin returned nothing.

521Web Server Is DownCloudflare

Cloudflare extension: the origin web server is down.

Troubleshoot: Verify the origin process and listening port, then check for a restart.

522Connection Timed OutCloudflare

Cloudflare extension: connection to origin timed out.

Troubleshoot: Whitelist CDN egress IPs on the origin firewall and check network reachability.

523Origin Is UnreachableCloudflare

Cloudflare extension: the origin is unreachable.

Troubleshoot: Check the origin address and DNS record, and whether the origin only listens internally.

524A Timeout OccurredCloudflare

Cloudflare extension: origin response timed out (100 s default).

Troubleshoot: Make long tasks asynchronous or cache them, and check origin-side slow queries.

525SSL Handshake FailedCloudflare

Cloudflare extension: SSL handshake with the origin failed.

Troubleshoot: Check the origin certificate, TLS versions, and cipher suites supported by the CDN.

526Invalid SSL CertificateCloudflare

Cloudflare extension: the origin certificate is invalid.

Troubleshoot: Check the certificate chain and hostname match, or relax the SSL mode.

527Railgun Listener to Origin ErrorCloudflare

Cloudflare extension: Railgun listener error; the feature is retired.

Troubleshoot: Railgun has been retired; this is a legacy code and can be ignored.

Something broken or missing?

Send feedback
Author's Blog
Share an idea