WatchFor
ReferenceHTTP Status Codes

HTTP Status Codes

Every HTTP status code explained — what each class means, the full reference table, and deep dives into the codes that actually page people at 3am.

Every HTTP response starts with a three-digit status code. The first digit tells you who's talking and how it went:

ClassMeaningWho's at fault
1xxInformational — request received, keep goingNobody
2xxSuccess — the request workedNobody
3xxRedirection — the resource is elsewhereNobody (usually)
4xxClient error — the request was wrongThe caller
5xxServer error — the request was fine, the server wasn'tYou

The distinction matters for monitoring: a 4xx on a health check usually means a broken URL or expired credentials in the check itself, while a 5xx means your service is genuinely misbehaving — which is why HTTP monitors treat them differently by default.

Full reference

1xx — Informational

CodeNameNotes
100ContinueClient may proceed with the request body
101Switching ProtocolsUpgrading, e.g. to WebSocket
103Early HintsPreload hints before the final response

2xx — Success

CodeNameNotes
200OKThe standard success response
201CreatedNew resource exists; see the Location header
202AcceptedQueued for async processing — not done yet
204No ContentSuccess with an empty body (common for DELETE)
206Partial ContentRange requests — video streaming, resumed downloads

3xx — Redirection

CodeNameNotes
301Moved PermanentlyThe SEO-relevant one — passes link equity
302FoundTemporary redirect, method may change to GET
304Not ModifiedConditional request — use your cached copy
307Temporary RedirectLike 302 but preserves the method and body
308Permanent RedirectLike 301 but preserves the method and body

4xx — Client errors

CodeNameNotes
400Bad RequestMalformed syntax, invalid body, bad headers
401UnauthorizedMissing or invalid authentication
403ForbiddenAuthenticated, but not allowed
404Not FoundThe classic
405Method Not AllowedRight URL, wrong verb (POST vs GET)
408Request TimeoutServer gave up waiting for the request
409ConflictState conflict — concurrent edits, duplicate create
410GonePermanently removed, deliberate signal to crawlers
413Content Too LargeBody exceeds server limits
418I'm a teapotAn April Fools RFC that shipped to production everywhere
422Unprocessable ContentSyntax fine, semantics wrong — validation errors
429Too Many RequestsRate limited; honor Retry-After

5xx — Server errors

CodeNameNotes
500Internal Server ErrorUnhandled exception, the catch-all
501Not ImplementedThe server doesn't support this functionality
502Bad GatewayA proxy got a bad response from upstream
503Service UnavailableOverloaded or down for maintenance
504Gateway TimeoutA proxy timed out waiting for upstream
507Insufficient StorageThe server is out of space

CDN vendor codes: Cloudflare extends 5xx with its own codes (520–526) — for example 522 is "connection timed out reaching the origin" and 525 is an SSL handshake failure with the origin. If you're behind Cloudflare, those codes point at the connection between the CDN and your server.

Debugging any status code

  1. Reproduce with full detail — the free HTTP header checker shows the status, every response header and the complete redirect chain for any URL.
  2. Check whether it's you or them — run the check from multiple regions; a 5xx from one region but not others usually means a network path or CDN PoP issue, not your origin.
  3. Watch it over time — a one-off 502 during a deploy is normal; a 502 every few minutes is a failing backend. An HTTP monitor with confirmed alerting makes that distinction for you.

On this page