HTTP status codes explained: what 200, 404, 502 mean for monitoring
· 6 min read
In brief: An HTTP status code is a three-digit number the server responds with to every request. The group tells the category: 2xx = OK, 3xx = redirect, 4xx = client error, 5xx = server error. From the uptime monitoring perspective, we care most about 5xx and 4xx anomalies.
In brief: An HTTP status code is a three-digit number the server responds with to every request. The group tells the category: 2xx = OK, 3xx = redirect, 4xx = client error, 5xx = server error. From the uptime monitoring perspective, we care most about 5xx and 4xx anomalies.
Response categories
- 1xx Informational - transient responses, the client usually doesn't notice.
- 2xx Success - the request succeeded. 200 OK is the default.
- 3xx Redirection - the client should go elsewhere. 301 permanent, 302 temporary.
- 4xx Client errors - the client sent something wrong. 404, 401, 403, 429.
- 5xx Server errors - the server failed. 500, 502, 503, 504.
2xx: success
200 OK - standard OK response. This is the "healthy" state you monitor for.
201 Created - typically a response to a POST that created a new resource. API clients expect it.
204 No Content - success but the server has nothing to return. DELETE endpoints often use it.
206 Partial Content - the server returned only part (range request). For video streaming or resumable downloads.
3xx: redirection
301 Moved Permanently - the URL changed permanently. Google transfers SEO equity to the new URL. Use during domain migration, transition from HTTP to HTTPS, switch to www/non-www.
302 Found / 307 Temporary Redirect - temporary redirect. Google doesn't move ranking. Use for A/B testing, maintenance, or when the URL will be back over time.
308 Permanent Redirect - like 301 but preserves the HTTP method (POST stays POST). 301 can be turned into GET by the client.
304 Not Modified - the client has cache, the server confirms the content hasn't changed. Saves bandwidth.
For monitoring: When checking 3xx responses configure whether the monitor should follow the redirect or treat it as an error. Some DNS hijack attacks manifest as unexpected 302.
4xx: client-side error
400 Bad Request - syntactic error in the request. Malformed JSON, missing header, etc.
401 Unauthorized - missing or bad credentials. The client must authenticate.
403 Forbidden - the client is authenticated but lacks permission. Watch out: some servers return 403 instead of 401 for security reasons (not revealing the resource exists).
404 Not Found - the URL doesn't exist. Doesn't matter for monitoring, but does for SEO (link equity leaks).
405 Method Not Allowed - the URL exists but doesn't accept the given method (e.g. POST to an endpoint that expects GET).
408 Request Timeout - the server waited for the request too long and closed the connection.
409 Conflict - the request conflicts with the current state (e.g. update of a version that's no longer current).
410 Gone - the resource was permanently removed. Better than 404 for Google (signal not to try to reindex).
422 Unprocessable Entity - the request is syntactically OK but contains semantically invalid data (failed validation).
429 Too Many Requests - rate limit. The client must slow down. The server typically adds the Retry-After header.
5xx: server-side error
500 Internal Server Error - generic error. The backend threw an exception the application didn't catch. Always alarm for monitoring.
501 Not Implemented - the server doesn't know the HTTP method (e.g. an old server doesn't support PATCH).
502 Bad Gateway - the reverse proxy (nginx, Cloudflare) didn't get a response from the backend server. Typically the backend crashed or timed out.
503 Service Unavailable - the server is overloaded or under maintenance. Often with a Retry-After header. This is a planned response, not a crash.
504 Gateway Timeout - the reverse proxy waited for the backend longer than the timeout. The backend is usually still running, just slow.
520-525 Cloudflare errors - specific to Cloudflare. 520 = backend returned something unreadable, 522 = backend didn't respond (connection timeout), 524 = backend responded too slowly (origin timeout).
Practical alerting rules
- Alert immediately: 500, 502, 503 (if not truly planned maintenance), 504, any timeout
- Alert on repetition: a one-off 5xx may be a race condition; alert if the same endpoint fails 2× in a row
- Watch upward trend: long-term growth in 4xx may mean broken link, scraper attack or broken frontend
- Ignore for alerting: 200-399 in the expected range (track response time instead of code)
Status code + response time = complete picture
Watching only the status code isn't enough - the server can return 200 but in 30 seconds, which from the customer's perspective is an outage. Quality monitoring combines:
- Expected status code (typically 200)
- Maximum response time (typically 5-10 seconds)
- Keyword match in the content (a keyword that must be in the HTML)
- SSL valid + not before the end of validity
Failure of any = alert.
Monitoring with precise error classification
ePulz.io distinguishes status code, response time, keyword match and SSL state. Logs for every check.
Try ePulz.io free - 7 days, no credit card needed.
Create account