HTTP Status Codes
Quick answer: the first digit tells you who owns the problem. 2xx success, 3xx redirect, 4xx the client's request is wrong, 5xx the server side failed. Debugging a 4xx means fixing the request; debugging a 5xx means checking the server or its upstreams.
1xx — Informational
| 100 | Continue | The server got the headers; send the body. |
| 101 | Switching Protocols | Protocol upgrade accepted (e.g. WebSocket). |
| 103 | Early Hints | Preload hints sent before the final response. |
2xx — Success
| 200 | OK | The request succeeded. |
| 201 | Created | A new resource was created. |
| 202 | Accepted | Queued for later processing; not done yet. |
| 204 | No Content | Success, with an empty body. |
| 206 | Partial Content | Range request answered with a slice of the resource. |
3xx — Redirection
| 301 | Moved Permanently | Canonical URL changed; update links and bookmarks. |
| 302 | Found | Temporary redirect; keep using the original URL. |
| 303 | See Other | Redirect after POST, fetching with GET. |
| 304 | Not Modified | Cached copy is still fresh; no body sent. |
| 307 | Temporary Redirect | Like 302 but method and body are preserved. |
| 308 | Permanent Redirect | Like 301 but method and body are preserved. |
4xx — Client errors
| 400 | Bad Request | The request itself is malformed. |
| 401 | Unauthorized | Authentication is missing or failed. |
| 403 | Forbidden | Authenticated or not, you may not access this. |
| 404 | Not Found | No resource at this URL. |
| 405 | Method Not Allowed | The HTTP method is not supported here. |
| 408 | Request Timeout | The client took too long to send. |
| 409 | Conflict | The request conflicts with current state (e.g. duplicate). |
| 410 | Gone | The resource existed and is permanently removed. |
| 413 | Content Too Large | The request body exceeds the limit. |
| 415 | Unsupported Media Type | Wrong Content-Type for this endpoint. |
| 422 | Unprocessable Content | Well-formed but semantically invalid (validation errors). |
| 429 | Too Many Requests | Rate limit hit; back off and retry later. |
5xx — Server errors
| 500 | Internal Server Error | The application crashed or errored unexpectedly. |
| 501 | Not Implemented | The server does not support this functionality. |
| 502 | Bad Gateway | The proxy/gateway got an invalid response from upstream. |
| 503 | Service Unavailable | Overloaded, restarting, or in maintenance. |
| 504 | Gateway Timeout | The upstream did not answer the proxy in time. |
502 vs 503 vs 504 — the reverse-proxy trio
Behind a reverse proxy or load balancer, these three codes report different failures. 502 Bad Gateway means the proxy reached the upstream but the answer was invalid — typically the app crashed, returned garbage, or closed the connection. 503 Service Unavailable means the upstream is known to be unavailable: overloaded, restarting, deploying, or rate-limited at the proxy itself. 504 Gateway Timeout means the upstream accepted the request but did not answer within the proxy's timeout — usually a slow query or a hung worker.
Practical order: check whether the app process is up (502), whether it is saturated or restarting (503), then which upstream call is slow (504). A full walkthrough is in the HTTP errors guide.