Skip to main content

HTTP status codes explained

The first digit of a status code sets the family: 1xx informational, 2xx success, 3xx redirect, 4xx client error, 5xx server error.

Free check 401 Unauthorized: what it means and how to fix it

A 401 means the request has no valid credentials. Covers the WWW-Authenticate header, expired tokens, clock skew, wrong header, and 401 versus 403.

View →
Free check 405 Method Not Allowed: causes and fixes

A 405 means the resource exists but rejects the HTTP method used. Covers the Allow header, static files, CORS preflight, nginx and framework routes.

View →
Free check 406 Not Acceptable: what it means and how to fix it

A 406 means the server cannot match what the client will accept. Covers content negotiation, the common ModSecurity/WAF cause, and how to fix it.

View →
Free check 413 Request Entity Too Large: causes and fixes

A 413 means the request body is bigger than a set limit. Covers nginx, Apache, PHP, IIS, Cloudflare and API gateway upload limits.

View →
Free check 422 Unprocessable Entity: what it means and how to fix it

A 422 means the request parsed fine but a value fails validation. Covers Rails, Laravel and FastAPI, 422 versus 400, and reading the error body.

View →
Free check 499 status code: what nginx means by client closed request

A 499 means the client disconnected before nginx finished responding. Covers the nginx access log, slow upstreams, and timeout alignment.

View →
Free check 400 Bad Request: what it means and how to fix it

A 400 means the server could not parse the request at all. Oversized cookies, bad URLs, header limits, WAF rules and how to tell them apart.

View →
Free check 403 Forbidden: Causes, Fixes and Bot Blocks That Fool Monitors

A 403 means the server refuses the request and credentials will not help. Covers permissions, WAF and geo blocks, and allowlisting a monitoring service.

View →
Free check 404 Not Found: Broken Links, Soft 404s and When to Use 410

A 404 says the URL has no current content, nothing more. Learn to tell broken links from deliberate removals, and to catch soft 404s that return 200.

View →
Free check 4xx Status Codes Explained: What Client Errors Really Mean

A 4xx means the server refused the request as sent. On your own site it is usually a broken route, a stale link or a firewall rule, not the visitor.

View →
Free check 500 Internal Server Error: Causes, Logs and How It Differs From 502

A 500 means your application broke and will not say how. Where to find the real error, and how 500 differs from 502, 503 and 504.

View →
Free check 502 Bad Gateway: What It Means and How to Fix It

A 502 means the proxy in front of your site got an invalid response, or none, from the backend. Read the nginx or Apache log line to find the cause.

View →
Free check 503 Service Unavailable: Overload, Maintenance and Retry-After

A 503 means the server is alive and refusing work on purpose. Learn the overload, maintenance and deploy patterns, and why Retry-After matters.

View →
Free check 504 Gateway Timeout: Slow Backends, Timeouts and 502 vs 503 vs 504

A 504 means the proxy waited too long for your backend. Covers slow queries, cold starts, timeout tuning and a clear 502 vs 503 vs 504 comparison.

View →
Free check 5xx Status Codes Explained: When Your Server Is the Problem

A 5xx means the server accepted the request and then failed. Each code names a different hop: what broke, and how to trace it.

View →
Free check 429 Too Many Requests: Rate Limits, Retry-After and False Alarms

A 429 is a rate limit, not an outage. Learn to read Retry-After, tell throttling from downtime, and stop your own monitoring from tripping the limit.

View →
Free check 1xx informational status codes

A 1xx response is interim: the server received the request and a real final response is still coming. It is not a success and not an error.

View →
Free check 200 OK: what it means and what it hides

200 OK means the request succeeded, not that the page is correct. Error pages, maintenance notices and empty shells are all served with a 200.

View →
Free check 2xx success status codes

2xx means the server accepted and completed the request. What 200, 201, 202, 204 and 206 each mean, and why a 200 is not proof of health.

View →
Free check 300 Multiple Choices: the code you will almost never see

300 offers the client a list of representations to choose from. It is valid HTTP but virtually unused, and most people who search it have a 301 or 302.

View →
Free check 301 vs 302: permanent and temporary redirects

301 moves a URL permanently and passes its ranking signals on; 302 is a temporary detour that keeps the original. How to pick, and how to check.

View →
Free check 303 See Other: the redirect after a form POST

303 tells the client to fetch the result at another URL with GET. It is the code behind Post/Redirect/Get, which stops reloads from resubmitting a form.

View →
Free check 304 Not Modified: why it is a success, not an error

304 means your cached copy is still current, so the server sends no body. It only answers conditional requests using ETag or Last-Modified.

View →
Free check 3xx redirection status codes

A 3xx tells the client the resource lives elsewhere. What 300 to 308 mean, which one to use, and how to find broken redirect chains.

View →

An HTTP status code is the three-digit number a server returns with every response, and its first digit tells you which of five families it belongs to: 1xx informational, 2xx success, 3xx redirection, 4xx client error and 5xx server error. Read that first digit and you already know whether the request worked, was sent somewhere else, was rejected, or broke.

The most useful thing a status code gives you is a starting point for blame. A 4xx means the server understood the request and refused it, so the problem is normally on the requesting side or in your own routing and access rules: a bad URL, a missing file, an expired credential, a rate limit. With a 5xx the request was fine and your infrastructure could not fulfill it, so look behind your own front door, at an application exception, an upstream service that is down, or a proxy that timed out waiting for a backend. A 3xx is neither a failure nor a finished response. It is an instruction to go somewhere else, and whether it is the right instruction depends entirely on how you configured it.

The guides below cover the codes people look up when a site misbehaves: the whole 3xx redirect family and the difference between a permanent and a temporary redirect, what a plain 200 does and does not prove, why 304 responses are a sign of healthy caching rather than an error, and the 4xx and 5xx codes that show up in real incidents. To see what a URL returns right now, including the full chain of redirects it walks through, run it through the HTTP check tool.