ops@toolbox:~$ httpstatuscodes --run

HTTP Status Codes

Searchable HTTP status code reference with debugging notes for each code.

CodeNameMeaning & debugging notes
100ContinueClient may proceed with the request body
101Switching ProtocolsUpgrading, e.g. to WebSocket
200OKRequest succeeded
201CreatedResource created; Location header points to it
202AcceptedQueued for async processing
204No ContentSuccess with empty body, common for DELETE
206Partial ContentRange request response (resumed downloads)
301Moved PermanentlyPermanent redirect; browsers and crawlers cache it
302FoundTemporary redirect; method may change to GET
304Not ModifiedClient cache is still valid (ETag / If-Modified-Since)
307Temporary RedirectLike 302 but method preserved
308Permanent RedirectLike 301 but method preserved
400Bad RequestMalformed syntax or invalid parameters
401UnauthorizedNot authenticated, credentials missing or invalid
403ForbiddenAuthenticated but not allowed
404Not FoundNo resource at this URI
405Method Not Allowede.g. POST to a GET-only endpoint; check Allow header
408Request TimeoutClient took too long to send the request
409ConflictState conflict, duplicate create, stale update
410GoneDeliberately removed, permanently
413Content Too LargeBody exceeds limits (nginx: client_max_body_size)
414URI Too LongUsually a redirect loop appending parameters
418I'm a teapotRFC 2324 joke; some WAFs use it for blocked bots
422Unprocessable ContentSyntax fine, semantics wrong, validation errors
425Too EarlyReplay risk in TLS 1.3 0-RTT
429Too Many RequestsRate limited; check Retry-After
431Header Fields Too LargeOften oversized cookies
451Unavailable For Legal ReasonsCensorship / legal block
500Internal Server ErrorUnhandled exception server-side, check app logs
501Not ImplementedServer doesn't support the method
502Bad GatewayProxy got an invalid response from upstream, upstream crashed or wrong port
503Service UnavailableOverloaded or in maintenance; often health-check failures
504Gateway TimeoutUpstream didn't answer in time, slow query or dead backend
505HTTP Version Not SupportedProtocol version rejected
507Insufficient StorageWebDAV / disk full
508Loop DetectedInfinite loop in WebDAV processing

Reading codes by class

The first digit tells you where to look: 2xx means success, 3xx means the answer is somewhere else (follow the Location header), 4xx means the client did something wrong, and 5xx means the server (or something between the client and the application) failed. That last distinction is the important one on call: a spike of 4xx is usually a broken client, a bad deploy of the frontend, or an attack; a spike of 5xx is your problem, right now.

The proxy trio: 502, 503, 504

Behind nginx, HAProxy or a cloud load balancer, these three carry precise meanings. 502 Bad Gateway: the proxy reached the upstream but got garbage or a closed connection, the app crashed, is listening on the wrong port, or its socket permissions are wrong. 503 Service Unavailable: no healthy upstream to send to, health checks failing, all workers busy, or deliberate maintenance mode. 504 Gateway Timeout: the upstream accepted the request but didn't answer within proxy_read_timeout, a slow database query, a deadlock, or an upstream that's alive but wedged. Knowing which of the three you're seeing cuts the investigation in half before you've opened a single log.

Frequently confused pairs

401 vs. 403: 401 means "I don't know who you are" (missing/expired credentials, re-authenticate); 403 means "I know exactly who you are, and no" (a permissions problem, re-authenticating won't help). 301 vs. 302: 301 is cached aggressively by browsers and search engines, so a mistaken permanent redirect keeps biting long after you fix the config, use 302 while testing, 301 only when you're sure. 404 vs. 410: both "not here", but 410 tells crawlers to stop trying, which is the polite way to retire URLs.

Related tools

Subnet Calculator
IPv4 CIDR calculator: network, broadcast, host range, mask and host count.
Common Ports Reference
Searchable table of the network ports sysadmins actually meet, with notes.
IPv6 Calculator
Expand, compress and subnet IPv6 addresses: network, range and address count.
IP Range → CIDR Converter
Convert an IPv4 address range into the minimal list of CIDR blocks.