Topic Cluster
HTTP Troubleshooting
Error diagnosis, status code debugging, and production-safe HTTP troubleshooting workflows.
- HTTP Status Codes
400 Bad Request
400 Bad Request means the server could not parse your request. Find which layer sent it, fix bad JSON and oversized cookies or headers, and reproduce with curl.
- HTTP Status Codes
405 Method Not Allowed
405 Method Not Allowed means the URL exists but not for that method. Read the Allow header, then fix redirects turning POST into GET, static hosting and WAFs.
- HTTP Status Codes
406 Not Acceptable
The server cannot produce a response matching the client's Accept headers. Learn about content negotiation and how to handle format mismatches.
- HTTP Status Codes
408 Request Timeout
408 Request Timeout means the server gave up waiting for the client to finish sending. Tune nginx, Apache, Node and ALB timeouts and tell it apart from 504.
- HTTP Status Codes
409 Conflict
409 Conflict means the request clashes with the resource's current state: duplicates, stale versions, locks. Use ETags and If-Match, and handle retries.
- HTTP Status Codes
410 Gone
Learn what 410 Gone means and when resources are permanently removed. Understand the difference between 410 and 404, and SEO implications for deleted content.
- HTTP Status Codes
411 Length Required: Why It Happens
411 Length Required: the server wants a Content-Length and got chunked or none. Fix it in curl, Node, Python and fetch, and on nginx and Google Frontend.
- HTTP Status Codes
412 Precondition Failed: Meaning and How to Fix It
412 means an If-Match or If-Unmodified-Since condition was false, usually because the resource changed after you read it. How to fix it and retry safely.
- HTTP Status Codes
413 Payload Too Large (Content Too Large): Causes and Fixes
413 Content Too Large (formerly Payload Too Large): find which layer rejected the upload and raise the limit in nginx, Apache, Cloudflare, Express and more.
- HTTP Status Codes
414 URI Too Long
The requested URI exceeds the server's maximum length limit. Learn about URI length limits and how to handle oversized requests.
- HTTP Status Codes
415 Unsupported Media Type
415 Unsupported Media Type: the server won't accept your Content-Type. Real Spring, DRF and ASP.NET errors, curl reproduction, fixes for fetch and FormData.
- HTTP Status Codes
416 Range Not Satisfiable: Causes and Fixes
416 Range Not Satisfiable means the requested byte range lies outside the resource. Find why resumed downloads and video requests fail, and how to fix it.
- HTTP Status Codes
417 Expectation Failed: Expect 100-continue
417 Expectation Failed means a server or proxy rejected your Expect header, usually Expect: 100-continue. Learn the causes and fixes for curl, .NET and Squid.
- HTTP Status Codes
419 Page Expired (Laravel CSRF Token Mismatch)
Laravel 419 Page Expired means the CSRF token did not match the session. Causes: expired session, missing @csrf, dropped cookie, cached forms. Fixes included.
- HTTP Status Codes
421 Misdirected Request: HTTP/2 Connection Coalescing
421 Misdirected Request means the server cannot answer for the host on this connection. Fix SNI and certificate mismatches caused by HTTP/2 connection reuse.
- HTTP Status Codes
422 Unprocessable Entity (Unprocessable Content) Explained
422 Unprocessable Content (formerly Unprocessable Entity): the JSON parsed but failed validation. FastAPI, Laravel and Rails errors, 422 vs 400, RFC 9457.
- HTTP Status Codes
423 Locked
The resource is locked and cannot be accessed or modified. Learn about WebDAV locks and how to handle locked resources.
- HTTP Status Codes
424 Failed Dependency (WebDAV)
424 Failed Dependency means a request failed because another action it depended on failed first. See WebDAV multi-status examples and what to fix.
- HTTP Status Codes
425 Too Early: TLS 1.3 0-RTT Replay Protection
425 Too Early tells a client not to send a request in TLS early data because it could be replayed. See the Early-Data header and nginx config for 0-RTT.
- HTTP Status Codes
428 Precondition Required
The server requires the request to be conditional. Learn when to use 428 Precondition Required to prevent lost updates and race conditions.
- HTTP Status Codes
431 Request Header Fields Too Large
The server refuses to process the request because header fields are too large. Learn how to handle and prevent 431 errors in your applications.
- HTTP Status Codes
444 Connection Closed Without Response (nginx)
nginx 444 closes the connection without sending any response. Learn how to use return 444 to drop bots and unknown hosts, and what clients see.
- HTTP Status Codes
451 Unavailable For Legal Reasons
The requested resource is unavailable due to legal demands. Learn about 451 status code used for censorship and content blocking.
- HTTP Status Codes
460 Client Closed Connection (AWS ALB)
An AWS ALB 460 means the client disconnected before the load balancer idle timeout. Confirm it in access logs, then compare client and target timings.
- HTTP Status Codes
463 Too Many Forwarded IP Addresses (AWS ALB)
AWS ALB 463 rejects an X-Forwarded-For header with more than 30 IP addresses. Trace proxy appends and correct the forwarding chain at a trusted ingress.
- HTTP Status Codes
464 Incompatible Request Protocol (AWS ALB)
AWS ALB 464 means the incoming HTTP or gRPC request conflicts with the target group protocol version. Inspect ProtocolVersion and listener routing.
- HTTP Status Codes
497 HTTP Request Sent to HTTPS Port (nginx)
nginx 497 means plain HTTP hit an HTTPS port; clients see "400 The plain HTTP request was sent to HTTPS port". Fix with error_page 497. Also 494, 495, 496.
- HTTP Status Codes
499 Client Closed Request (nginx)
nginx 499 means the client hung up before the response was sent. Why it spikes with slow upstreams, how proxy_ignore_client_abort works, and how to debug it.
- HTTP Status Codes
501 Not Implemented
The server doesn't support the functionality required to fulfill the request. Learn about unimplemented features.
- HTTP Status Codes
504 Gateway Timeout: nginx, ALB and Cloudflare Fixes
Fix 504 Gateway Timeout: nginx proxy_read_timeout (60s default), ALB 60s idle, API Gateway 29s, Cloudflare 524 at 125s, with error-log strings and curl timing.
- HTTP Status Codes
505 HTTP Version Not Supported
Learn what 505 HTTP Version Not Supported means when servers reject protocol versions. Understand HTTP/1.1, HTTP/2 compatibility and version negotiation.
- HTTP Status Codes
506 Variant Also Negotiates
506 Variant Also Negotiates is a server configuration error in transparent content negotiation (RFC 2295). See what triggers it in Apache and how to fix it.
- HTTP Status Codes
507 Insufficient Storage: What the Error Means
507 means the server ran out of space to store what your request needs. Where it comes from, including WebDAV, uploads and quotas, and what to check.
- HTTP Status Codes
508 Loop Detected: Proxy and Redirect Loops
508 Loop Detected means the server found an infinite loop while processing a request. Learn the WebDAV origin, proxy loops, CDN-Loop and how to find the cycle.
- HTTP Status Codes
509 Bandwidth Limit Exceeded (cPanel Hosting)
cPanel documents 509 Bandwidth Limit Exceeded for an administrator-imposed transfer limit. Confirm account usage in WHM and adjust the quota or wait.
- HTTP Status Codes
510 Not Extended (HTTP Extension Framework)
510 Not Extended comes from the experimental HTTP Extension Framework in RFC 2774, now historic. See what it meant and what to do if you hit it.
- HTTP Status Codes
511 Network Authentication Required: Captive Portals
511 is returned by a network gateway, such as hotel or airport Wi-Fi, that requires login before granting internet access. Learn how apps should handle it.
- HTTP Status Codes
520 Web Server Returned an Unknown Error
Cloudflare-specific error when the origin server returns an unexpected response. Learn about 520 errors and how to troubleshoot them.
- HTTP Status Codes
521 Web Server Is Down
Cloudflare-specific status code indicating the origin server refused the connection. Learn about this proxy error and how to troubleshoot it.
- HTTP Status Codes
522 Connection Timed Out
Cloudflare-specific error when unable to establish a TCP connection to the origin server. Learn how to diagnose and fix 522 timeout errors.
- HTTP Status Codes
523 Origin Is Unreachable
Cloudflare-specific error when the origin server's IP address is unreachable. Learn about DNS and routing issues causing 523 errors.
- HTTP Status Codes
524 A Timeout Occurred
Cloudflare-specific error when the origin server takes too long to respond. Learn how to diagnose and fix 524 timeout errors.
- HTTP Status Codes
525 SSL Handshake Failed (Cloudflare)
Cloudflare 525 means the TLS handshake with your origin server failed. Diagnose with openssl s_client, check SSL modes, ciphers, SNI and port 443, and fix it.
- HTTP Status Codes
526 Invalid SSL Certificate (Cloudflare)
Cloudflare 526 means the origin certificate failed Full (strict) validation. Check expiry, hostname and chain with openssl, then fix it.
- HTTP Status Codes
529 Site Is Overloaded (SSL Labs and Anthropic)
529 is a non-standard overload code used by SSL Labs and Anthropic. Identify the API, inspect overloaded_error, and back off without confusing it with 429.
- HTTP Status Codes
530 Error with 1xxx Codes (Cloudflare)
Cloudflare 530 never appears alone: it comes with a 1xxx error such as 1016 Origin DNS error or 1033 Tunnel error. Read the code in the page body and fix it.
- HTTP Status Codes
561 Unauthorized (AWS ALB Authentication)
AWS ALB 561 means the identity provider returned an error during listener authentication. Read error_reason in access logs and inspect the IdP response.
- HTTP Status Codes
HTTP 502 Bad Gateway: nginx, ALB and Cloudflare Fixes
Fix 502 Bad Gateway: decode nginx error-log lines, php-fpm sockets, ALB keep-alive mismatches and Cloudflare 502 vs 52x, with curl checks.
- HTTP Status Codes
HTTP 503 Service Unavailable: Causes, Fixes and Retry-After
Fix HTTP 503 Service Unavailable: nginx no live upstreams, Kubernetes endpoints, ALB healthy hosts, Cloudflare, and a maintenance page with Retry-After.
- Glossary
HTTP Error Handling
Learn HTTP error handling best practices for detecting, managing, and responding to errors gracefully. Understand status codes, retry logic, and user feedback.
- Debug Guides
429 Too Many Requests: Fix It with Retry-After and Backoff
Fix 429 Too Many Requests as an API client: honor Retry-After, back off exponentially with jitter, read RateLimit headers, handle GitHub and LLM limits.
- Debug Guides
DNS_PROBE_FINISHED_NXDOMAIN: Find and Fix DNS Failures
Fix DNS_PROBE_FINISHED_NXDOMAIN by comparing authoritative and cached answers, then checking VPN DNS, hosts files, Docker, CoreDNS and DNSSEC.
- Debug Guides
ERR_CERT_AUTHORITY_INVALID: Chain and CA Trust Fixes
Fix ERR_CERT_AUTHORITY_INVALID by inspecting missing intermediates, private CAs, TLS inspection and the CA stores actually used by curl, Node and Python.
- Debug Guides
ERR_CERT_DATE_INVALID: Expired Certificates and Fixes
Fix NET::ERR_CERT_DATE_INVALID by checking certificate dates, client clocks, failed renewals, stale nginx deployments and expired intermediate certificates.
- Debug Guides
ERR_CONNECTION_REFUSED: Localhost, Docker and Node Fixes
Fix ERR_CONNECTION_REFUSED by checking listeners, localhost IPv4/IPv6, Docker port mappings, firewall rejection, service crashes and Kubernetes endpoints.
- Debug Guides
ERR_CONNECTION_RESET and ECONNRESET: Find the RST
Fix ERR_CONNECTION_RESET, ECONNRESET and curl (56) Connection reset by peer: keep-alive races, body limits, firewalls, crashes. Find who sent the RST.
- Debug Guides
ERR_CONNECTION_TIMED_OUT: Trace TCP Connection Failures
Fix ERR_CONNECTION_TIMED_OUT by tracing SYN packets, checking firewalls and stale DNS, testing IPv6, and separating backlog pressure from MTU stalls.
- Debug Guides
ERR_CONTENT_DECODING_FAILED: Fix Broken Compression
Fix ERR_CONTENT_DECODING_FAILED by comparing raw bytes with Content-Encoding, checking double compression, truncated gzip and cached encoding variants.
- Debug Guides
ERR_EMPTY_RESPONSE: Find Who Closed the Connection
Debug ERR_EMPTY_RESPONSE and curl empty replies by checking app crashes, wrong ports, nginx 444, Docker listeners, keep-alive races and request framing.
- Debug Guides
ERR_HTTP2_PROTOCOL_ERROR: Find the Broken Response
Debug Chrome ERR_HTTP2_PROTOCOL_ERROR and curl (92): compare HTTP versions, inspect invalid headers and body lengths, then trace the failing hop.
- Debug Guides
ERR_INCOMPLETE_CHUNKED_ENCODING: Fix Truncated Responses
Fix ERR_INCOMPLETE_CHUNKED_ENCODING by finding missing final chunks, upstream crashes, nginx read timeouts, buffering failures and stalled SSE streams.
- Debug Guides
ERR_SSL_PROTOCOL_ERROR: Causes and Fixes in Chrome
Fix ERR_SSL_PROTOCOL_ERROR: plain HTTP on port 443, TLS version mismatches, SNI, TLS-inspecting proxies and Cloudflare, with curl and openssl checks.
- Debug Guides
ERR_TOO_MANY_REDIRECTS: Find and Break the Redirect Loop
Fix ERR_TOO_MANY_REDIRECTS (redirected you too many times): Cloudflare Flexible SSL, WordPress URLs, nginx HTTPS loops and cookie loops, diagnosed with curl.
- Debug Guides
Mixed Content Blocked: HTTPS Page Requesting HTTP
Fix 'Mixed Content: The page was loaded over HTTPS, but requested an insecure resource': find the http:// URLs, add upgrade-insecure-requests, fix proxies.
- Debug Guides
NET::ERR_CERT_COMMON_NAME_INVALID: Fix the Name Mismatch
Fix NET::ERR_CERT_COMMON_NAME_INVALID and related ERR_CERT errors: SAN vs CN, wildcard limits, missing SNI, expired or incomplete chains, with openssl checks.
- Debug Guides
nginx 413 Request Entity Too Large: client_max_body_size
Fix nginx 413 Request Entity Too Large: raise client_max_body_size, then check Cloudflare limits, ingress-nginx proxy-body-size and PHP upload limits.
- Debug Guides
nginx 502 Bad Gateway: Causes and Fixes by Error Log
Fix nginx 502 Bad Gateway by matching the error log: connection refused, prematurely closed connection, php-fpm socket permissions, too big header, keepalive.
- Debug Guides
nginx 504 Gateway Timeout: Fix Upstream Timed Out (110)
Fix nginx 504 Gateway Time-out and 'upstream timed out (110)': proxy_read_timeout, fastcgi_read_timeout, ALB idle timeout, and Cloudflare 524 compared.
- Debug Guides
nginx Upstream Sent Too Big Header: Fix the 502
Fix nginx upstream sent too big header: measure response headers, size proxy or FastCGI buffers, and shrink oversized Set-Cookie and redirect headers.
- Debug Guides
No 'Access-Control-Allow-Origin' Header Is Present: Fix CORS
Fix the CORS error 'No Access-Control-Allow-Origin header is present on the requested resource' with working Express, nginx, S3, Workers and Django fixes.
- Debug Guides
Request Header Or Cookie Too Large: Fix 400 and 431
Fix 400 Request Header Or Cookie Too Large and 431 errors: find the oversized cookie or token, then check nginx, Apache, Node, ALB and Cloudflare limits.
More Topic Clusters
- 67 resources
HTTP Fundamentals
Core HTTP primitives and baseline concepts every web engineer should know.
- 44 resources
HTTP Security
Security headers, cookie hardening, CORS policy design, and defensive API behavior.
- 40 resources
HTTP Performance
Caching, compression, connection behavior, and practical latency optimization topics.
- 11 resources
HTTP Authentication
Auth flows, authorization semantics, credentials handling, and access control patterns.