HTTP status codes: the ones that actually matter day-to-day

There are over 60 official HTTP status codes. In practice, a handful cover almost everything you'll actually debug.

HTTP status codes are grouped by their first digit: 2xx means success, 3xx means redirection, 4xx means the client did something the server can't process, and 5xx means the server itself failed. Knowing the group tells you where to start looking before you even check the specific code.

The 4xx codes worth knowing apart

404 (Not Found) means the resource doesn't exist at that URL -- check the path, not the server. 401 (Unauthorized) means you're not authenticated at all; 403 (Forbidden) means you are authenticated but don't have permission -- mixing these two up is one of the most common debugging mistakes, since they sound similar but point to completely different fixes (login vs. permissions). 429 (Too Many Requests) means you've been rate-limited, not blocked outright.

The 5xx codes worth knowing apart

500 (Internal Server Error) is a generic catch-all for 'something broke on the server' with no more specific code available. 502 (Bad Gateway) and 504 (Gateway Timeout) both point to a problem between servers -- a reverse proxy or load balancer couldn't get a valid response from an upstream server, or that upstream server took too long. These almost always mean the problem is in your infrastructure layer, not your application code directly.

Where redirects (3xx) trip people up

301 (Moved Permanently) tells search engines and browsers to update their records and treat the new URL as canonical going forward. 302 (Found) signals a temporary redirect and shouldn't transfer SEO value the way a 301 does. Using 302 for a permanent URL change is a common SEO mistake that can leave the old URL competing with the new one in search results instead of consolidating properly.