Reference guide · http-status · Published 2026-08-15 · 4 min read

HTTP status codes explained

HTTP status codes explained: the 1xx to 5xx classes, a quick reference table of common statuses, and how status codes interact with caching and redirects.

Overview

Every HTTP response starts with a status code, a three-digit number that names the result of the request. The first digit is the class:

The codes your site will meet

CodeNameMeaningWhat to do
200OKSuccessNothing
301Moved PermanentlyThe URL moved for goodCheck the target
302 / 307Found / Temporary RedirectTemporary moveConfirm it is temporary
304Not ModifiedCached copy is currentNothing
400Bad RequestMalformed requestFix the client payload
401UnauthorizedCredentials missing or badSend correct auth
403ForbiddenKnown, but not allowedChange the rule or permission
404Not FoundURL does not existRedirect or restore
410GoneWas here, gone foreverDrop or 301
429Too Many RequestsRate limitedWait and retry
500Internal Server ErrorServer bugRead the log
502Bad GatewayGateway got nothing usableCheck the upstream
503Service UnavailableTemporarily unavailableWait or remove the marker
504Gateway TimeoutUpstream took too longRaise timeout or profile the work

How to read one in practice

The status code is not the whole truth; the headers and body carry the next fact. In a redirect (3xx) the Location header names the target, and a Retry-After header on 429 or 503 names the wait window. A 404 or 500 only gives you the full story when you pair it with the server log for that request.

# See the status and the headers of any URL
curl -sI https://example.com/some/path
HTTP/2 200
Content-Type: text/html; charset=utf-8

Status codes in daily site work

Experience, not memory, decides which sites implement each status properly. Two genuinely common traps:

  1. Soft 404: the server replies 200 for a dead URL. Crawlers keep it in the index, no signal moves, and the dead page looks rankable forever.
  2. A 301 standing where a 404 should be: a catch-all redirect to the home page for a URL that does not exist. Users bounce, links point nowhere useful, and the extra hop adds real latency to every crawl of that path.

Which one to choose for your own site

Reading a redirect chain

HopStatusLocationMeaning
Request-/oldStart
1301/newPermanent move, carries value
2200-Final page

A chain is any series of 3xx. Two or more hops are still valid, but each hop adds a request and a small risk, so keep the number small and audit them with a curl -L or a chain checker when you change a site.

Prevention with statuses

Need a website built, fixed, optimised, migrated or replaced?

This technical resource is written by CSMBAC, a small design and development studio. If you would rather hand the problem to a professional, the website service page explains how we build enquiry-ready websites.

Explore website services