Continue
Server received request headers; client should proceed to send the body.
🔧 DevOps Cause: Normal behavior for large uploads; if stuck here, check proxy timeout settings for expect-continue headers.
Complete reference of HTTP status codes with DevOps-focused explanations, common causes, and troubleshooting guidance for production systems.
Server received request headers; client should proceed to send the body.
🔧 DevOps Cause: Normal behavior for large uploads; if stuck here, check proxy timeout settings for expect-continue headers.
Server is switching to a different protocol as requested by the client.
🔧 DevOps Cause: Seen during WebSocket upgrades. If failing, ensure your load balancer/reverse proxy supports WebSocket protocol upgrades.
Server has received and is processing the request, but no response is available yet.
🔧 DevOps Cause: Used with WebDAV. If requests hang here, the backend is taking too long — consider async processing or increasing timeouts.
Used to return some response headers before the final HTTP message.
🔧 DevOps Cause: Used for preloading resources. If not working, check CDN/proxy support for 103 responses.
The request succeeded. The response payload depends on the request method.
🔧 DevOps Cause: Expected healthy response. If health checks return 200 but the app seems broken, verify the health endpoint actually checks dependencies.
The request succeeded, and a new resource was created.
🔧 DevOps Cause: Normal for POST/PUT requests creating resources. If not returned when expected, check API logic and database write permissions.
The request has been accepted for processing, but processing is not complete.
🔧 DevOps Cause: Common in async architectures (queues, batch jobs). If consumers are down, requests may pile up — monitor queue depth.
The server successfully processed the request but returns no content.
🔧 DevOps Cause: Normal for DELETE operations. If your monitoring flags these as errors, adjust your status code alerting rules.
Server is delivering only part of the resource due to a range header.
🔧 DevOps Cause: Used for video streaming, large file downloads. If broken, check if your CDN/proxy correctly forwards Range headers.
The resource has been permanently moved to a new URL.
🔧 DevOps Cause: Check Nginx/Apache rewrite rules. Redirect loops often come from misconfigured HTTP-to-HTTPS or www-to-non-www rules.
The resource temporarily resides at a different URL.
🔧 DevOps Cause: Often used in OAuth flows. If login loops occur, check session/cookie settings and whether the redirect URI is correctly configured.
Resource has not been modified since the last request; use cached version.
🔧 DevOps Cause: Browser cache is working correctly. If stale content persists after a deploy, purge CDN cache or adjust Cache-Control headers.
The request should be repeated with another URI, but future requests should still use the original.
🔧 DevOps Cause: Preserves request method unlike 302. If POST requests lose their body after redirect, switch from 302 to 307 in your reverse proxy config.
The resource has permanently moved, and the request method must not change.
🔧 DevOps Cause: Like 301 but preserves method. Use when migrating API endpoints and you need POST/PUT requests to follow the redirect.
The server cannot process the request due to a client error.
🔧 DevOps Cause: Malformed JSON, invalid query params, or request body too large. Check client payload and Nginx client_max_body_size.
Authentication is required and has failed or not been provided.
🔧 DevOps Cause: Token expired, missing API key, or auth service down. Check if the identity provider is reachable and tokens are not stale.
The server understood the request but refuses to authorize it.
🔧 DevOps Cause: IAM/RBAC misconfiguration, IP allowlist blocking, or WAF rule triggered. Check security groups, NACLs, and WAF logs.
The requested resource could not be found on the server.
🔧 DevOps Cause: Incorrect routing, missing ingress path, or deployment issue where new routes are not registered. Check ingress/route config.
The request method is not supported for the requested resource.
🔧 DevOps Cause: CORS preflight misconfigured, or reverse proxy stripping/changing the HTTP method. Check allowed methods in route config.
The server timed out waiting for the request from the client.
🔧 DevOps Cause: Client is too slow sending data. Common with mobile/slow networks. Adjust keep-alive and client timeout settings.
The request conflicts with the current state of the target resource.
🔧 DevOps Cause: Concurrent writes, optimistic locking failures, or resource already exists. Check database constraints and retry logic.
The request entity is larger than the server is willing to process.
🔧 DevOps Cause: Nginx default is 1MB. Increase client_max_body_size in Nginx or adjust body-size annotation in K8s ingress.
The URI provided was too long for the server to process.
🔧 DevOps Cause: Query strings too large. Consider switching to POST with a body. Check large_client_header_buffers in Nginx.
The media format of the request is not supported by the server.
🔧 DevOps Cause: Missing or wrong Content-Type header. Ensure clients send the correct header and the API accepts the format.
The request was well-formed but semantically invalid.
🔧 DevOps Cause: Validation error in the application layer. Check API schema validation rules and input constraints.
The user has sent too many requests in a given time period.
🔧 DevOps Cause: Rate limiter triggered (Nginx limit_req, API gateway throttle, or app-level). Check rate limit config and consider increasing for legitimate traffic.
A generic error when the server encounters an unexpected condition.
🔧 DevOps Cause: Unhandled exception in application code. Check application logs, recent deployments, and environment variable changes.
The server acting as a gateway received an invalid response from upstream.
🔧 DevOps Cause: Upstream server not responding or crashed. Check reverse proxy/load balancer config, upstream health, and if the backend process is running.
The server is currently unable to handle the request due to overload or maintenance.
🔧 DevOps Cause: Server overloaded, in maintenance mode, or failing health checks. Check pod readiness, auto-scaling, and circuit breakers.
The server acting as a gateway did not receive a timely response from upstream.
🔧 DevOps Cause: Backend took too long to respond. Increase proxy_read_timeout in Nginx, check slow DB queries, or optimize the endpoint.
The server does not support the HTTP protocol version used in the request.
🔧 DevOps Cause: Rare — usually means a very old client or misconfigured proxy. Check if your reverse proxy is forcing an HTTP version mismatch.
The server is unable to store the representation needed to complete the request.
🔧 DevOps Cause: Disk full on the server. Check disk usage, log rotation, and PV (Persistent Volume) capacity in Kubernetes.
Cloudflare-specific: The origin server returned an unexpected response.
🔧 DevOps Cause: Origin server crashed or returned empty/malformed response. Check origin server logs and ensure it is running properly.
Cloudflare-specific: The origin server refused the connection.
🔧 DevOps Cause: Origin server is down or blocking Cloudflare IPs. Verify the server is running and Cloudflare IP ranges are allowlisted.
Cloudflare-specific: TCP connection to the origin server timed out.
🔧 DevOps Cause: Network issue between CDN and origin. Check firewall rules, security groups, and network connectivity to the origin.
Cloudflare-specific: DNS points to an unreachable origin.
🔧 DevOps Cause: DNS records point to a wrong IP or the origin server's network is down. Verify DNS A/AAAA records and origin IP.
| Code | Name | Category |
|---|---|---|
| 100 | Continue | Informational |
| 101 | Switching Protocols | Informational |
| 102 | Processing | Informational |
| 103 | Early Hints | Informational |
| 200 | OK | Success |
| 201 | Created | Success |
| 202 | Accepted | Success |
| 204 | No Content | Success |
| 206 | Partial Content | Success |
| 301 | Moved Permanently | Redirection |
| 302 | Found (Temporary Redirect) | Redirection |
| 304 | Not Modified | Redirection |
| 307 | Temporary Redirect | Redirection |
| 308 | Permanent Redirect | Redirection |
| 400 | Bad Request | Client Error |
| 401 | Unauthorized | Client Error |
| 403 | Forbidden | Client Error |
| 404 | Not Found | Client Error |
| 405 | Method Not Allowed | Client Error |
| 408 | Request Timeout | Client Error |
| 409 | Conflict | Client Error |
| 413 | Payload Too Large | Client Error |
| 414 | URI Too Long | Client Error |
| 415 | Unsupported Media Type | Client Error |
| 422 | Unprocessable Entity | Client Error |
| 429 | Too Many Requests | Client Error |
| 500 | Internal Server Error | Server Error |
| 502 | Bad Gateway | Server Error |
| 503 | Service Unavailable | Server Error |
| 504 | Gateway Timeout | Server Error |
| 505 | HTTP Version Not Supported | Server Error |
| 507 | Insufficient Storage | Server Error |
| 520 | Web Server Returned an Unknown Error | Server Error |
| 521 | Web Server Is Down | Server Error |
| 522 | Connection Timed Out | Server Error |
| 523 | Origin Is Unreachable | Server Error |
HTTP status codes are three-digit numbers returned by web servers to indicate the outcome of an HTTP request. They are grouped into five categories: 1xx (Informational), 2xx (Success), 3xx (Redirection), 4xx (Client Error), and 5xx (Server Error). Understanding these codes is essential for debugging web applications, APIs, load balancers, and microservice architectures where multiple services communicate over HTTP.
DevOps engineers, backend developers, and SREs use HTTP status codes daily when troubleshooting production issues, configuring health checks, setting up monitoring alerts, and analyzing access logs. A 502 Bad Gateway in your monitoring dashboard tells a completely different story than a 429 Too Many Requests—each code points to a specific layer in your stack where the problem originated. This reference helps you quickly identify what went wrong and where to look for the root cause.
A 401 Unauthorized means the request lacks valid authentication credentials—the user needs to log in or provide a valid token. A 403 Forbidden means the user is authenticated but does not have permission to access the resource. In practice: 401 means "who are you?" while 403 means "I know who you are, but you can't access this."
A 502 Bad Gateway occurs when a reverse proxy or load balancer (like Nginx, AWS ALB, or Cloudflare) receives an invalid response from an upstream server. Common causes include: the upstream application crashed, the container was restarted, connection timeouts due to slow responses, or misconfigured proxy_pass targets. Check upstream application logs and ensure the backend service is running and healthy.
A 503 Service Unavailable indicates the server is temporarily unable to handle the request, usually due to maintenance or overload. Unlike a 500 (which suggests a bug), a 503 is often intentional and temporary. Load balancers return 503 when all backend targets are unhealthy, and applications may return it during graceful shutdowns or when circuit breakers are open.