HTTP Status & Headers Checker

Debug a broken deploy, a misrouted CDN rule, or an unexpected 5xx spike. Run a real HTTP request against any URL and see the raw status, every response header, and the full redirect chain — exactly as Googlebot or a browser would.

Understanding HTTP Status Codes

HTTP status codes are three-digit responses from a server to a client's request. They tell you whether the request was successful, whether there was an error, or whether the resource has moved.

2xx Success

The request was successfully received, understood, and accepted (e.g., 200 OK).

3xx Redirection

Further action is needed by the user agent to fulfill the request (e.g., 301 Moved Permanently).

4xx Client Error

The request contains bad syntax or cannot be fulfilled (e.g., 404 Not Found).

5xx Server Error

The server failed to fulfill an apparently valid request (e.g., 500 Internal Server Error).

How to interpret the results

The checker shows three things: the final HTTP status, every response header grouped by purpose, and the full redirect chain with timings. Read them together — a single 200 is rarely the whole story.

  • 200 OK with a cache-control: public, max-age=0 — technically a success, but CDNs will not cache the response. Fine for logged-in pages, bad for a static marketing page.
  • 301 → 301 → 200 — the destination is reachable, but each extra hop adds latency and costs crawl budget. Collapse multi-step chains into a single redirect.
  • 302 where you expected a 301 — search engines treat 302 as temporary and may keep the old URL indexed for months. Switch to 301 once the move is permanent.
  • 404 Not Found — the server answered, but the resource does not exist. Compare with a working URL: is it a typo, a missing slug, or a broken route?
  • 403 Forbidden — the request was rejected. Typical causes: directory listing disabled, WAF bot challenge, or an IP-based firewall rule.
  • 429 Too Many Requests — rate limit hit. Check the retry-after header and back off.
  • 502 / 503 / 504 — the edge (CDN, load balancer, reverse proxy) could not reach a healthy origin. Look at origin health before blaming the edge.
  • Connection timeout with no status — DNS resolved but the server never sent bytes. Firewall, wrong port, or the origin is down.

Common issues and fixes

Redirect loop after forcing HTTPS

Classic symptom: your proxy terminates TLS and forwards plain HTTP to the app, which sees http and redirects back to https. Fix: trust X-Forwarded-Proto in the application (Express app.set('trust proxy', 1), Rails config.force_ssl with a proxy-aware check, Django SECURE_PROXY_SSL_HEADER).

Mixed 200/301 between www and apex

Both example.com and www.example.com respond 200. Google will pick one and may split link equity. Choose a canonical host and redirect the other with a permanent 301 at the edge.

Security headers missing after a CDN switch

Custom origin headers are sometimes stripped by the CDN unless explicitly forwarded. Re-add Strict-Transport-Security, Content-Security-Policy, and X-Content-Type-Options at the CDN layer, not just the origin.

Unexpected 3xx on a POST endpoint

Legacy 301/302 can silently rewrite POST to GET and drop the body. If you cannot remove the redirect, use 307 or 308 so method and payload are preserved.

CORS looks broken but request returns 200

CORS errors show up in the browser console, not in the status code. Check the Access-Control-Allow-Origin header and confirm the preflight OPTIONS request is also returning the expected headers.

What to do next

Once the response looks correct in a one-off check, the next question is: will it still look correct at 3am on a Saturday? Status codes, redirect chains, and security headers drift silently — a CDN rule change, a certificate rotation, or a new deployment can quietly flip a 200 to a 500 without anyone noticing until traffic drops.

  • Re-run this check after every deploy as part of a release checklist.
  • Add an alert on the specific headers you care about (HSTS, CSP) — not just on status code.
  • For high-traffic pages, set up continuous monitoring on FlashMon.app so the next 5xx sends a notification before users tweet about it.

Stop manual checking

Get notified automatically when your status codes or headers change.

Start Free Trial

Frequently Asked Questions