301 vs 302 Redirect: Caching, SEO, and 307/308
301 vs 302: what each tells browsers and Google, why a wrong 301 is hard to undo, when to use 307, 308 or 303, and how to check a redirect chain.
DiagnoseGuides for HTTP status errors (403, 404, 5xx), redirect loops, connection failures, security headers, and open ports. Each guide includes a free check for your URL.
301 vs 302: what each tells browsers and Google, why a wrong 301 is hard to undo, when to use 307, 308 or 303, and how to check a redirect chain.
Diagnose307 vs 308 redirects keep the request method — unlike 301/302, which turn POST into GET. Check which code your server returns. Free instant check.
Diagnose400 Bad Request? Separate malformed syntax from oversized headers or cookies, then see which layer rejected it. Free instant check, no sign-up.
Diagnose401 Unauthorized? Credentials are missing or rejected. Tell an expired token from a stripped header from a 403 in 3 checks. Free instant check, no sign-up.
Diagnose402 Payment Required means access is gated behind payment, not a crash. Tell a quota block from a frozen store in 3 checks. Free instant check, no sign-up.
Diagnose403 Forbidden means a server or firewall refused the request. Find which layer said no, then fix permissions, missing index, deny rules, WAF or geo blocks.
DiagnoseWhat 404 Not Found means, how to tell which layer returned it, the usual causes (rewrites, SPA fallback, case, trailing slash) and how to handle deleted pages.
Diagnose405 means the server knows the URL but refuses that HTTP method there. How to read the Allow header, find which layer answered, and fix the usual causes.
Diagnose406 Not Acceptable means the server can't produce a response matching your Accept header. Tell it from 415, then fix the header in 4 checks. Free instant check, no sign-up.
Diagnose407 Proxy Authentication Required means a proxy rejected your credentials, not the origin. Tell it from a 401 in 3 checks. Free instant check, no sign-up.
Diagnose408 Request Timeout: the server quit waiting for the request, not the reply. Separate a slow client from a reaped keepalive. Free instant check, no sign-up.
Diagnose409 Conflict means the request was valid but fought the resource's current state and lost. Tell a duplicate key from a stale ETag from a real race. Free instant check, no sign-up.
Diagnose410 Gone means a resource is intentionally, permanently removed - not 404. When to serve it, how Google treats each, verify in 3 checks. Free HTTP check.
Diagnose411 Length Required means the server rejected a request with no Content-Length. Buffer the body, set the length, resend. Free instant check, no sign-up.
Diagnose412 Precondition Failed means your If-Match ETag no longer matches the server version. Spot the stale write and CDN ETag trap. Free instant check, no sign-up.
Diagnose413 means some layer refused a request body as too big. How to find which one (Cloudflare, nginx, Apache, PHP, your app) and raise or route around it.
Diagnose414 Request-URI Too Large: the URL exceeded the server's request-line limit. Check query bloat, redirect loops, server config. Free instant check, no sign-up.
Diagnose415 Unsupported Media Type means the server rejects your body's Content-Type. Tell it from 400, 406, and 422, then fix it. Free instant check, no sign-up.
Diagnose416 Range Not Satisfiable means your Range header asked for bytes past the file's end. Find the real length in 3 checks. Free instant check, no sign-up.
Diagnose417 Expectation Failed means a proxy rejected your Expect: 100-continue. Resend without the header, find where the 417 starts. Free instant check, no sign-up.
Diagnose421 Misdirected Request? Separate HTTP/2 connection reuse from an origin SNI or certificate mismatch in 3 checks. Free instant check, no sign-up.
Diagnose422 Unprocessable Content means your body parsed but failed validation. Read the field errors, tell it from 400 and 415. Free instant check, no sign-up.
Diagnose423 Locked means a resource is locked against changes. Find the lock that's blocking you in 3 steps, then release it. Free instant check, no sign-up.
Diagnose424 Failed Dependency means your request relied on another that failed first. Find the real upstream error in 3 steps and confirm the status. Free instant check, no sign-up.
Diagnose425 Too Early means a server refused a TLS 1.3 early-data request over replay risk. See why it fires and how to retry safely. Free instant check, no sign-up.
Diagnose426 Upgrade Required means the server won't answer over this protocol. Read the Upgrade header, then check TLS and HTTP version. Free instant check, no sign-up.
Diagnose428 Precondition Required means the server refuses your PUT/PATCH without an If-Match ETag. GET the ETag, resend in 3 steps. Free instant check, no sign-up.
Diagnose429 Too Many Requests? Tell an origin rate limit from a CDN or WAF block in 3 checks: final status code, Retry-After, which layer responded. Free instant check, no sign-up.
Diagnose431 Request Header Fields Too Large: your headers exceeded the server limit. Fix in 3 checks: cookies, big token, server limit. Free instant check, no sign-up.
Diagnose444 Connection Closed Without Response means nginx dropped your request with no reply. Check 3 things: reachability, TLS/SNI, WAF rules. Free instant check.
Diagnose451 Unavailable For Legal Reasons: a legal demand blocked the resource. Read the Link rel=blocked-by header to find who blocked it, in 3 checks. Free instant HTTP check.
Diagnose494 Request Header Too Large is nginx's log code for oversized headers, usually a bloated cookie. Isolate client vs server. Free instant check, no sign-up.
Diagnose499 Client Closed Request means the caller quit before nginx replied. Tell a real user from a load balancer that timed out. Free instant check, no sign-up.
Diagnose501 Not Implemented means the server can't recognize the request method, not that it's blocked. Tell it from 405 and a proxy. Free instant check, no sign-up.
Diagnose502 means a proxy got no usable answer from the server behind it. How to tell which proxy sent it, read the nginx error log, and fix each common cause.
DiagnoseA 503 means the server chose not to serve the request: maintenance, rate limiting, overload or no healthy backends. How to tell which, and how to fix each.
DiagnoseA 504 means a proxy gave up waiting for the server behind it. How to find which layer's timer fired, read nginx's log line, and fix the slow request.
Diagnose505 HTTP Version Not Supported: a server refused your HTTP major version. Spot a malformed request line vs a proxy rewrite. Free instant check, no sign-up.
Diagnose506 Variant Also Negotiates is a server content-negotiation loop. Find the bad Apache type-map or MultiViews in 3 steps. Free instant check, no sign-up.
Diagnose507 Insufficient Storage means the server ran out of room — a full disk, blown quota, or dead inodes. Find it in 3 checks. Free instant check, no sign-up.
Diagnose508 Resource Limit Is Reached means your account blew its CloudLinux LVE cap — CPU, memory, or processes. Not a bug. Free instant check, no sign-up.
Diagnose509 Bandwidth Limit Exceeded: your host hit its monthly transfer cap, not a server bug. Tell it from 503, find the drain. Free instant check, no sign-up.
Diagnose510 Not Extended is a rare HTTP error that rarely means what the spec says. Find which server returned it and what to check. Free instant check, no sign-up.
Diagnose511 Network Authentication Required means a captive portal, not the site, is blocking you. Isolate it in 3 checks. Free instant check, no sign-up.
DiagnoseCloudflare 520 means the origin replied with an empty or malformed response. Check crashes, oversized headers, and keep-alive timeout. Free instant check, no sign-up.
DiagnoseCloudflare Error 524 means your origin connected but never finished the response in ~100s. Check slow endpoints, workers, async offload. Free instant check.
DiagnoseCloudflare Error 1033: the hostname routes to a Tunnel with no live cloudflared connector. Check the tunnel, route, connector. Free instant check, no sign-up.
DiagnoseCloudflare Error 1101 means your Worker threw an exception — not an origin failure. Tell it apart from 1102, 1027, and 5xx. Free instant check, no sign-up.
DiagnoseCloudflare Error 1102 means your Worker blew past its CPU or 128 MB memory limit — not a crash. Tell it apart from 1101, 1027, and 1015. Free instant check.
DiagnoseError 521 means your origin refused Cloudflare's connection. How to tell a stopped server from a firewall blocking Cloudflare, and how to fix each cause.
DiagnoseError 522 means Cloudflare's TCP connection to your origin timed out. How to see where the packets stop, the usual causes and the fix for each.
Diagnosecurl: (7) Failed to connect means the TCP connect failed. Tell refused (port closed) from timed out (firewall drop), plus the proxy trap. Free instant check.
DiagnoseERR_BLOCKED_BY_RESPONSE: a COEP/CORP policy blocked a cross-origin resource. Check the page COEP and the resource CORP header. Free instant check, no sign-up.
DiagnoseERR_CONNECTION_CLOSED means a TCP FIN closed the connection mid-request. Check TLS, keep-alive, antivirus, and reachability. Free instant check, no sign-up.
DiagnoseERR_CONNECTION_REFUSED means the host answered but nothing accepted the connection on that port. The usual causes, localhost included, and the fix for each.
DiagnoseERR_CONNECTION_RESET means a TCP reset killed a connection that had already opened. How to tell whether your network or the server sent it, and each fix.
DiagnoseERR_CONNECTION_TIMED_OUT means nothing answered the connection attempt. How to tell your side from the server's, and fix dropped packets, wrong IPs, routing.
DiagnoseERR_CONTENT_LENGTH_MISMATCH: the body ended before the bytes Content-Length promised. Measure it with curl; fix nginx temp files, timeouts, bad headers.
DiagnoseERR_EMPTY_RESPONSE means the connection opened and closed with no reply. How to tell your side from the site's, reproduce it with curl, and fix each cause.
DiagnoseERR_HTTP2_INADEQUATE_TRANSPORT_SECURITY: TLS too weak for HTTP/2. Fix in 3 checks: TLS version, cipher suite, TLS inspector. Free instant check, no sign-up.
DiagnoseERR_HTTP2_PING_FAILED means the server ignored Chrome's HTTP/2 keep-alive ping. Fix in 3 checks: server load, proxy, network. Free instant check, no sign-up.
DiagnoseERR_HTTP2_PROTOCOL_ERROR: the HTTP/2 session broke after TLS connected. Fix in 3 checks: server config, headers, CDN. Free instant check, no sign-up.
DiagnoseERR_HTTP2_SERVER_REFUSED_STREAM: the server refused the request unprocessed. Check load balancer, HTTP/2 limits, and cookies. Free instant check, no sign-up.
DiagnoseERR_INCOMPLETE_CHUNKED_ENCODING means a chunked response ended before its final chunk. Backend crash, nginx temp, or proxy? Free instant check, no sign-up.
DiagnoseERR_INVALID_CHUNKED_ENCODING: the server's chunk framing is malformed, not truncated. Find double-chunking or stray output. Free instant check, no sign-up.
DiagnoseERR_PROXY_CONNECTION_FAILED means Chrome can't reach your proxy, not the website. Isolate proxy from server in 3 checks. Free instant check, no sign-up.
DiagnoseERR_QUIC_PROTOCOL_ERROR: Chrome's QUIC (HTTP/3 over UDP) connection broke. Fix in 3 checks: server, UDP port 443, middlebox. Free instant check, no sign-up.
DiagnoseERR_RESPONSE_HEADERS_TOO_BIG means Chrome hit its 256 KB response-header cap — usually runaway cookies. Find it in 3 checks. Free instant check, no sign-up.
DiagnoseERR_SPDY_PROTOCOL_ERROR is Chrome's HTTP/2 session breaking; the name is legacy. Fix in 3 checks: headers, middlebox, sockets. Free instant check, no sign-up.
DiagnoseERR_TOO_MANY_REDIRECTS means two rules keep sending the browser back and forth. How to trace the chain with curl, read the pattern, and fix the usual causes.
DiagnoseERR_TUNNEL_CONNECTION_FAILED is your proxy refusing the CONNECT tunnel, not the site. Check 3 things: proxy, site status, DNS. Free instant check, no sign-up.
DiagnoseERR_UNSAFE_PORT means Chrome blocked the port, not the site. Confirm the port is open in 3 checks and move it off the blocklist. Free instant check, no sign-up.
DiagnoseError 1003 means a request hit Cloudflare by raw IP, not the hostname. Check the client, DNS proxy state, and origin exposure in 3 steps. Free instant check, no sign-up.
DiagnoseCloudflare Error 1015: a rate-limit rule tripped on your request volume. Tell it from 1020 and an origin 429 in 4 checks. Free instant check, no sign-up.
DiagnoseError 1027 means a Cloudflare Worker hit the Free plan's 100,000/day request cap. Fix it in 4 checks: status, source, fail-open, upgrade. Free instant check.
DiagnoseNmap port "filtered" vs "closed"? What each state means — RST, dropped packets, or ICMP unreachable — checked in 4 steps. Free instant port check, no sign-up.
DiagnoseWhat HSTS preload adds over the header, the exact hstspreload.org requirements, the includeSubDomains risk, a safe max-age ramp, and why removal is slow.
DiagnoseHTTP 463: an AWS ALB got an X-Forwarded-For header with 30+ IPs and refused the request. Trace the proxy chain in 3 steps. Free instant check, no sign-up.
DiagnoseA 500 page never says what broke. Where the real error is logged (nginx, Apache, PHP-FPM, journalctl, frameworks), the usual causes, and the fix for each.
DiagnoseHTTP Error 403.14 - Forbidden on IIS: fix it in 3 checks — default document, extensionless routing, and the 404 it hides. Free instant check, no sign-up.
DiagnoseHTTP Error 500.19 is IIS failing to read a config file, not your app crashing. The HRESULT hex points to bad XML, a lock, or permissions. Free instant check.
DiagnoseHTTP Error 502.5 means IIS ran but the ASP.NET Core Module couldn't start your app. Check the runtime, stdout log, and processPath. Free instant check.
DiagnoseWhich HTTP security headers matter, what values to send, how to roll out CSP without breaking the site, and nginx, Apache and Cloudflare configs.
DiagnoseForce HTTP to HTTPS: choose 301 vs 308, add HSTS, and fix the proxy redirect loop that breaks it. Verify the chain with a free instant check, no sign-up.
DiagnoseWhy browsers block or upgrade http:// resources on HTTPS pages, how to find them in DevTools, and fixes: upgrade-insecure-requests, proxy headers, WordPress.
DiagnoseNo 'Access-Control-Allow-Origin' header? Fix it in 3 checks: failed preflight, exact origin echoed back, and credentials mode. Free instant check, no sign-up.
Diagnoseno live upstreams means nginx marked every backend unavailable and returns 502. Tell health-check ejection from a config trap. Free instant check, no sign-up.
DiagnoseOpen port check: see which ports are reachable from outside, tell filtered from closed, and fix port forwarding in order. Free instant check, no sign-up.
DiagnoseWhich open ports are dangerous and why (RDP, SMB, databases, Redis, Telnet, Docker), how to find them, and how to close them: localhost, firewall, VPN.
DiagnoseOn 21 October 2026 PHP fixed two flaws (CVE-2026-109618 and CVE-2026-109619) that allow remote code execution without logging in. Which releases fix them, how to check the PHP your server really runs, and what to do after updating.
DiagnoseShould port 443 be open, and why does it show as closed? Test it from outside, then check the listener, firewall, security group and NAT, with a fix for each.
DiagnosePR_CONNECT_RESET_ERROR: a TCP reset killed the connection — not a bad certificate. Server-side or a middlebox on your side? Find out in 3 checks. Free instant check, no sign-up.
DiagnoseIs a slow site waiting on the server, sending too many bytes or re-downloading files? curl checks, plus Cache-Control and gzip/Brotli configs.
Diagnosessh port 22 Connection refused means the host answered but nothing's listening there — not a firewall timeout. Fix it in order. Free instant check, no sign-up.
Diagnoseupstream sent too big header is nginx logging a 502 because your backend response headers overflow proxy_buffer_size. Free instant check, no sign-up.
DiagnoseSearch Console says 'noindex' detected in 'X-Robots-Tag' http header? How to see the header, trace it to server, CDN, preview host or app, and get reindexed.
Diagnose