HTTP Status Codes & Redirect Chains: Complete Debugging Guide
Master HTTP status codes, understand redirect chains, inspect response headers, and debug website issues. The free HTTP Status Checker shows the full redirect chain and all response headers for any URL — no signup required.
How HTTP Requests Work
HTTP (HyperText Transfer Protocol) is the protocol underlying every web page load. Designed by Tim Berners-Lee in 1989 and standardized in HTTP/1.1 (RFC 2616, 1999), HTTP defines how clients (browsers, apps, API consumers) and servers communicate. HTTP/2 (2015) and HTTP/3 (2022) added performance improvements but the status code system remained backward-compatible.
When a browser navigates to a URL:
- DNS resolution — the domain name is resolved to an IP address
- TCP/TLS handshake — a connection is established (TLS adds the HTTPS encryption layer)
- HTTP request — the browser sends a GET request with headers
- HTTP response — the server replies with a status code, headers, and body
- Rendering — the browser parses HTML, requests sub-resources (CSS, JS, images), and renders the page
The status code in step 4 is the most important diagnostic signal. It tells the client in three digits whether the request succeeded, failed, needs further action, or landed at the wrong address.
Complete HTTP Status Code Reference
1xx — Informational
Provisional responses sent before the final response. Rarely seen in browser DevTools but important for HTTP/2 server push and long-polling.
| Code | Name | Meaning |
|---|---|---|
| 100 | Continue | Client should send the request body. Used with Expect: 100-continue |
| 101 | Switching Protocols | Server is switching to the protocol specified in Upgrade header (e.g. WebSocket) |
2xx — Success
| Code | Name | Meaning |
|---|---|---|
| 200 | OK | Standard success. Request succeeded, response body contains the result |
| 201 | Created | POST/PUT succeeded and created a new resource. Location header points to it |
| 202 | Accepted | Request accepted for processing, but not yet complete (async jobs) |
| 204 | No Content | Success but no response body (common for DELETE and some PUTs) |
| 206 | Partial Content | Server fulfilled a Range request — used for video streaming and resumable downloads |
3xx — Redirection
| Code | Name | SEO impact | Use when |
|---|---|---|---|
| 301 | Moved Permanently | Passes ~99% of link equity | Permanent URL change, domain migration |
| 302 | Found (Temporary) | No link equity transfer | Temporary redirect, maintenance pages |
| 304 | Not Modified | Not applicable | Browser uses cached version — great for performance |
| 307 | Temporary Redirect | No equity transfer | Temporary, but preserves HTTP method (POST stays POST) |
| 308 | Permanent Redirect | Same as 301 | Permanent, preserves HTTP method (use over 301 for non-GET) |
4xx — Client Errors
| Code | Name | Meaning |
|---|---|---|
| 400 | Bad Request | Malformed request syntax, invalid parameters |
| 401 | Unauthorized | Authentication required or failed |
| 403 | Forbidden | Authenticated but not permitted |
| 404 | Not Found | Resource does not exist at this URL |
| 405 | Method Not Allowed | GET used where only POST accepted (or vice versa) |
| 409 | Conflict | Request conflicts with current server state (e.g. duplicate unique key) |
| 410 | Gone | Resource permanently deleted — stronger than 404 for SEO de-indexing |
| 422 | Unprocessable Entity | Request understood but validation failed (common in REST APIs) |
| 429 | Too Many Requests | Rate limit exceeded. Check Retry-After header |
5xx — Server Errors
| Code | Name | Meaning |
|---|---|---|
| 500 | Internal Server Error | Unhandled exception. Check server logs |
| 502 | Bad Gateway | Upstream server returned invalid response (common during deploys) |
| 503 | Service Unavailable | Server overloaded or in maintenance. Temporary |
| 504 | Gateway Timeout | Upstream server took too long to respond |
Redirect Chains: What They Are and Why They Matter
A redirect chain occurs when URL A redirects to URL B, which redirects to URL C. Each hop requires a full HTTP round-trip: DNS resolution, TCP connection, TLS handshake, request, response. On a 100ms latency connection, each redirect adds ~100ms of unavoidable delay before the browser can even start loading the actual page.
Example chain
http://example.com → 301 → https://example.com
https://example.com → 301 → https://www.example.com
https://www.example.com → 200 OK (final destination)
Total: 3 HTTP requests, ~600ms added latency at 200ms/hopPerformance impact
| Redirect hops | Added latency (200ms/hop) | Impact |
|---|---|---|
| 0 | 0ms | Ideal |
| 1 | ~200ms | Acceptable (HTTP → HTTPS) |
| 2 | ~400ms | Noticeable on slow connections |
| 3+ | 600ms+ | Poor UX; investigate and consolidate |
SEO implications
Google passes PageRank (link equity) through 301 and 308 redirects, but each hop in a chain slightly degrades the equity transfer. More practically: Googlebot has a finite crawl budget. Long redirect chains waste crawl budget on intermediate URLs that provide no value, reducing the number of real pages crawled per day. This directly impacts how quickly new content gets indexed.
Use 301 (not 302) for permanent moves to pass equity. Fix multi-hop chains by configuring your server to redirect directly from the original URL to the final destination.
Key Response Headers
| Header | Example | Purpose |
|---|---|---|
Content-Type | text/html; charset=utf-8 | How browser should interpret the body |
Cache-Control | max-age=3600, public | Caching policy — how long and by whom |
ETag | "abc123def" | Version fingerprint for conditional GET requests |
Strict-Transport-Security | max-age=31536000 | Force HTTPS for future requests (HSTS) |
Content-Security-Policy | default-src 'self' | Whitelist for scripts and resources (XSS prevention) |
X-Frame-Options | DENY | Prevent page from being embedded in iframes (clickjacking) |
Access-Control-Allow-Origin | https://app.example.com | CORS — which origins may access this resource |
Vary | Accept-Encoding, Accept-Language | Which request headers affect the cached response |
Using the HTTP Status Checker
- Open the HTTP Status Checker
- Paste any URL (with or without
https://) - Click Check Status
- The tool shows the full redirect chain with status codes at each hop, final status, response time, and all response headers
- For batch checking, switch to Batch mode and paste multiple URLs (one per line)
Check HTTP Status Codes Free Online
Full redirect chain, response headers, batch URL checking — no signup required.
Open HTTP Status Checker