HTTP Status Code Lookup

Look up any HTTP status code and what causes it, from 1xx to 5xx. Searchable and filterable, with one-click copy and a bulk URL status checker. Free.

Advertisement

HTTP status codes: a searchable reference with causes, fixes and a bulk URL checker

A status code is the first line of every HTTP response, and it is the server telling you what happened before it tells you anything else. This page is a reference for 62 of them — every code in current use across all five classes — and each entry carries a plain description, the causes that actually produce it, concrete steps to fix it, its RFC reference, and related codes you probably also want to read.

The reference tab has a search box that matches on the number, the reason phrase and the description text, so typing 429, rate or too many all land in the same place. There is a jump-to-code box for going straight to a number, filters for the five classes, and a security filter that narrows the list to codes with authentication, authorisation or exposure implications. Results show as a grid or a flat list, paginated twelve at a time, and clicking any code opens a detail panel. Several of the heavily used codes — 301, 302, 401, 403, 404, 429, 500 — also carry copy-ready configuration snippets for Nginx, Apache, Express and Next.js. Ctrl/Cmd+K focuses search; Esc closes the detail panel.

The five classes

ClassNameWhat it meansWho needs to act
1xxInformationalThe request was received; the server is still working. An interim response, not a final one.Usually nobody — handled by the client library
2xxSuccessfulThe request was received, understood and accepted.Nobody
3xxRedirectionFurther action is needed to complete the request, normally following a Location header.The client, automatically
4xxClient ErrorThe request was malformed, unauthorised, or asked for something that is not there.The caller — retrying the same request unchanged will not help
5xxServer ErrorThe request may have been valid; the server failed to fulfil it.The server operator

The dividing line between 4xx and 5xx is responsibility, and it is worth being strict about it. A 4xx says “you asked wrongly”; a 5xx says “I broke”. An API that returns 500 for a validation failure is lying to its callers and will drown its own error dashboards. An API that returns 400 for a database outage hides a real incident.

301 vs 302 vs 307 vs 308

Two questions separate these four: is the move permanent, and is the HTTP method preserved?

CodeReason phrasePermanent?Method preserved?
301Moved PermanentlyYesNot guaranteed — clients historically rewrite POST to GET
302FoundNoNot guaranteed — same historical rewrite
303See OtherNoNo, deliberately — the client is told to use GET
307Temporary RedirectNoYes — method and body are preserved
308Permanent RedirectYesYes — method and body are preserved

The method-rewriting on 301 and 302 is not a browser bug; it is behaviour that predates the specification and was then documented as permitted. 307 and 308 exist precisely to remove the ambiguity. Practical consequences:

  • Moving a page for good? 301. Search engines consolidate signals onto the target, and browsers cache it — sometimes very stubbornly, which is why a mistaken 301 is painful to unwind. Test with a 302 first if you are unsure.
  • Redirecting an API endpoint that takes POST? 308, not 301. A 301 can turn your POST into a GET and the body vanishes silently.
  • Maintenance page, A/B test, geographic bounce? 302 or 307 — anything you intend to reverse.
  • Post/Redirect/Get after a form submission? 303. It is the code that says “the POST worked; now go GET this other thing”, which is what stops a browser refresh from resubmitting.

Also in the class: 300 Multiple Choices, rarely used; 304 Not Modified, the caching response to a conditional request carrying If-None-Match or If-Modified-Since, which returns headers and no body and is the single cheapest response a server can send; and 305 Use Proxy, deprecated and ignored by modern clients. Note that 306 is reserved and no longer used, which is why the list jumps from 305 to 307. When you need to trace where a chain of these actually terminates, the site’s redirect-chain-checker follows the hops one at a time.

401 vs 403

401 Unauthorized means unauthenticated — the name is a long-standing misnomer. The server does not know who you are, or the credentials you sent were rejected. A conforming 401 must include a WWW-Authenticate header describing how to authenticate. The fix is on the credential path: send a token, refresh an expired one, correct the scheme.

403 Forbidden means the server understood the request and is refusing it, and re-authenticating will not change the outcome. The identity may be perfectly valid and simply lack the right. The fix is on the permission path: role assignments, ACLs, file ownership, bucket policy.

The test that settles it: would sending better credentials fix this? If yes, 401. If no, 403. Two wrinkles worth knowing. Some servers deliberately return 404 instead of 403 for resources you may not even know exist, because a 403 confirms existence and leaks structure — a legitimate trade of correctness for privacy. And a great many reported “403 errors” in browser consoles are actually CORS failures: the request was blocked or rejected at the origin policy layer, not because of any permission on the resource. Check the response headers before you go looking at file permissions. Related codes: 407 Proxy Authentication Required, which is 401 for a proxy rather than the origin, and 511 Network Authentication Required, the captive-portal code.

404 vs 410

404 Not Found means the server has no representation for this URI and is not saying why. It might never have existed, it might be a typo, it might come back tomorrow. It is inherently non-committal.

410 Gone means it existed, it was deliberately removed, and it is not coming back. That extra certainty is the entire value. Crawlers treat a 410 as a stronger removal signal than a 404 and generally stop retrying sooner, and clients with a cached copy know to discard it rather than hope. When you genuinely delete content — a retired product, an expired listing, a page taken down on purpose — 410 is the honest answer and the one that gets the URL out of the index fastest.

Where 404 is still right: unknown URLs, mistyped paths, anything you have not decided about. Where neither is right: content that moved. That is a 301, and redirecting a removed page to an unrelated one is worse than either code, because it teaches crawlers that your redirects do not mean anything. The one thing you must not do is serve a “page not found” message with a 200 status — a soft 404 is invisible to every automated check you own.

500 vs 502 vs 503 vs 504

These four look identical to a user and mean completely different things to whoever is on call. The distinction is which machine failed.

CodeReason phraseWhat failedFirst place to look
500Internal Server ErrorThe application itself hit an unhandled conditionApplication logs and the stack trace
502Bad GatewayA proxy or load balancer got an invalid or empty response from upstreamWhether the upstream process is running and listening on the expected port
503Service UnavailableThe server is temporarily unable to handle the request — overload or planned maintenanceCapacity, worker pools, connection limits, deploy state
504Gateway TimeoutA proxy waited for upstream and gave upSlow queries and the proxy’s own timeout setting

502 and 504 both point at the boundary between two systems, and the difference is whether the upstream answered badly or did not answer in time. A 502 that appears the instant you request is usually a dead backend; a 504 that appears after a fixed interval is a timeout, and that interval is a configuration value you can read. Raising the proxy timeout makes 504s disappear without making anything faster — sometimes that is the right call, more often it just moves the pain.

503 is the one class of server error that is meant to be temporary, and it is the correct code for planned maintenance. It should carry a Retry-After header so clients and crawlers know to come back rather than treating the outage as removal. The rest of the class: 501 Not Implemented (the method is unrecognised, not merely disallowed — that is 405), 505 HTTP Version Not Supported, 507 Insufficient Storage, 508 Loop Detected, and 510 Not Extended.

429 and Retry-After

429 Too Many Requests says you have exceeded a rate limit. It is not a failure of your request; it is a statement about your request rate. The critical part is the Retry-After header, which the server may send as either a number of seconds or an HTTP-date, and which tells you exactly how long to wait. A client that ignores it and retries immediately is making the problem worse and will usually be limited harder.

The correct client behaviour is: read Retry-After and honour it if present; otherwise back off exponentially with some jitter, so that a fleet of clients hit by the same limit does not synchronise and retry in lockstep. Cap the number of attempts. Many APIs also expose remaining-quota headers so you can throttle before you get limited at all, and the detail panel for 429 in this tool includes worked retry-with-backoff implementations for JavaScript and TypeScript alongside rate-limiter configurations for Express and Next.js middleware.

Related codes in the same neighbourhood: 408 Request Timeout, where the client was too slow to send its request rather than too fast; 425 Too Early, which refuses a request that risks 0-RTT replay; and 431 Request Header Fields Too Large, which in practice almost always means an oversized cookie.

The codes that trip people up for other reasons

  • 400 vs 422: 400 Bad Request is for a request the server cannot parse. 422 Unprocessable Entity is for one that parsed perfectly and is semantically wrong — valid JSON, invalid values. RFC 9110 renames it Unprocessable Content.
  • 405 Method Not Allowed: the resource exists but not for this method, and a conforming 405 must include an Allow header listing the ones that work. That header is the answer to your question.
  • 201 Created: should carry a Location header pointing at what you just made. 202 Accepted means queued, not done. 204 No Content means success with deliberately empty body — correct for a DELETE.
  • 206 Partial Content: the response to a Range request. It is how video seeking and resumable downloads work, and its failure sibling is 416 Range Not Satisfiable.
  • 409 Conflict: the request collides with current state — a duplicate unique key, or an edit against a stale version.
  • 413, 414, 415: body too large, URI too long, media type unsupported. Each is a limit somewhere in your stack that you can raise, and 413 in particular is often a proxy limit rather than an application one.
  • 451 Unavailable For Legal Reasons: blocked for legal rather than technical reasons. The number is a deliberate reference to Fahrenheit 451.
  • 418 I’m a teapot: from an April Fools’ RFC in 1998. It is genuinely reserved, genuinely never appropriate in production, and genuinely still implemented all over the place.
  • 103 Early Hints: an interim response that lets the browser start preloading assets while the real response is still being generated. Alongside 100 Continue (paired with Expect: 100-continue) and 101 Switching Protocols (the WebSocket upgrade).
  • 207 Multi-Status, 422, 423 Locked, 424 Failed Dependency, 507: the WebDAV family. If you are not doing WebDAV, 422 is the only one you will meet.

Checking real URLs in bulk

The second tab takes a list of URLs — one per line or comma-separated, up to 100 at a time — and reports what each one actually returns. Bare hostnames are normalised to https:// automatically. For each URL you get the final status code, its reason phrase, the response time in milliseconds, and the full redirect chain expanded hop by hop, so a URL that goes through three 301s before landing on a 404 shows you all four steps rather than just the last one. It follows up to ten redirects, applies a five-second timeout per request, and runs up to ten checks concurrently. Results export to CSV or JSON.

This tab is the one part of the tool that is not purely local: the checks are performed server-side, because a browser cannot read cross-origin response headers or observe a redirect chain without following it opaquely. Requests are sent with HEAD where the server supports it, and identify themselves honestly in the User-Agent. The reference tab, by contrast, is entirely static data in the page — searching and filtering send nothing anywhere.

One note on RFC references. Each entry cites the specification that defined it, and for most core codes that is the RFC 7230–7235 series. Those were consolidated into RFC 9110 in 2022, which is now the authoritative document for HTTP semantics; the codes and their meanings did not change, and a handful of reason phrases were retitled — 413 to Content Too Large, 422 to Unprocessable Content. Codes defined outside the core series keep their own references: RFC 6585 for 428, 429, 431 and 511; RFC 7538 for 308; RFC 7725 for 451; RFC 8297 for 103; RFC 4918 for the WebDAV codes.

What Are HTTP Status Codes

HTTP status codes are three-digit numbers returned by web servers in response to client requests. They indicate whether a request was successful, redirected, resulted in a client error, or caused a server error. Understanding status codes is essential for web development, API design, debugging, and monitoring.

Status codes are defined by RFC 9110 (HTTP Semantics) and organized into five classes based on their first digit. This tool provides a comprehensive reference for all standard and common non-standard status codes with explanations, use cases, and debugging guidance.

Status Code Classes

ClassRangeMeaningExamples
1xx100-199Informational — request received, processing continues100 Continue, 101 Switching Protocols
2xx200-299Success — request received, understood, and accepted200 OK, 201 Created, 204 No Content
3xx300-399Redirection — further action needed to complete request301 Moved Permanently, 302 Found, 304 Not Modified
4xx400-499Client Error — request contains errors or cannot be fulfilled400 Bad Request, 401 Unauthorized, 404 Not Found
5xx500-599Server Error — server failed to fulfill a valid request500 Internal Server Error, 502 Bad Gateway, 503 Service Unavailable

Most Common Status Codes

CodeNameWhen Returned
200OKRequest succeeded — response contains the requested resource
201CreatedResource was successfully created (POST/PUT)
204No ContentSuccess, but no response body (DELETE, updates)
301Moved PermanentlyResource has a new permanent URL — update bookmarks
304Not ModifiedCached version is still valid — no data transfer needed
400Bad RequestRequest syntax or parameters are invalid
401UnauthorizedAuthentication required or failed
403ForbiddenAuthenticated but not authorized for this resource
404Not FoundResource does not exist at this URL
429Too Many RequestsRate limit exceeded — slow down
500Internal Server ErrorGeneric server failure — check server logs
502Bad GatewayUpstream server returned an invalid response
503Service UnavailableServer is overloaded or in maintenance

Common Use Cases

  • API development: Choose the correct status code for each API response to follow HTTP semantics and help clients handle responses appropriately
  • Debugging: Quickly look up unfamiliar status codes encountered during development and troubleshooting
  • Monitoring and alerting: Configure monitoring to alert on specific status codes (spike in 5xx errors, unexpected 401s, 429 rate limiting)
  • SEO optimization: Ensure redirects use correct codes (301 for permanent, 302 for temporary) to preserve search engine rankings
  • Load balancer configuration: Configure health checks and error handling based on backend status codes

Best Practices

  1. Use specific codes, not just 200 and 500 — Return 201 for created resources, 204 for successful deletions, 404 for missing resources, and 409 for conflicts. Specific codes help clients handle responses correctly.
  2. Return 401 vs 403 correctly — 401 means "you need to authenticate." 403 means "you authenticated but lack permission." Conflating them leaks information about resource existence.
  3. Use 429 with Retry-After — When rate limiting, return 429 Too Many Requests with a Retry-After header telling the client when to try again.
  4. Never return 200 with an error body — Some APIs return 200 OK with {"error": "not found"} in the body. This breaks HTTP semantics and confuses monitoring, caching, and client error handling.
  5. Log all 5xx errors — Every 500-level response represents a server failure that needs investigation. Ensure comprehensive logging for all 5xx responses.

Frequently Asked Questions

What are HTTP status codes and why are they important?+

HTTP status codes are 3-digit responses from servers indicating request results. Categories: 1xx (informational), 2xx (success), 3xx (redirection), 4xx (client error), 5xx (server error). Purpose: communicate success/failure, enable proper error handling, assist debugging, affect SEO rankings. Common codes: 200 OK (success), 404 Not Found (missing resource), 500 Internal Server Error (server problem). Clients use codes to: retry on 503, cache 200 responses, follow 301 redirects, display error messages. Essential for web APIs, browser behavior, and application logic.

What is the difference between 301, 302, 307, and 308 redirects?+

Redirect codes indicate resource moved: 301 Moved Permanently: permanent redirect, search engines transfer SEO value, browsers cache it. 302 Found (temporary): temporary redirect, search engines keep original URL, may not cache. 307 Temporary Redirect: like 302 but preserves request method (POST stays POST), more explicit about temporary nature. 308 Permanent Redirect: like 301 but preserves request method, newer standard (RFC 7538). Use 301 for: domain changes, HTTPS migration, permanent URL changes. Use 302/307 for: A/B testing, maintenance mode, temporary moves. Modern practice: prefer 307/308 over 302/301 when method preservation matters.

What do 4xx client error codes mean and how do I fix them?+

4xx errors indicate client-side problems: 400 Bad Request: malformed syntax, invalid data. Fix: validate request format. 401 Unauthorized: missing/invalid authentication. Fix: provide credentials. 403 Forbidden: authenticated but not authorized. Fix: check permissions. 404 Not Found: resource doesn't exist. Fix: verify URL, check routes. 405 Method Not Allowed: wrong HTTP method (GET vs POST). Fix: use correct method. 408 Request Timeout: client took too long. Fix: optimize request speed. 429 Too Many Requests: rate limit exceeded. Fix: implement backoff, reduce frequency. Client fixes: validate input, provide auth, check URLs, respect rate limits.

What do 5xx server error codes mean and how do I troubleshoot them?+

5xx errors indicate server-side failures: 500 Internal Server Error: generic error, something broke. Check: server logs, exceptions, database connections. 502 Bad Gateway: upstream server returned invalid response. Check: proxy configuration, upstream server health. 503 Service Unavailable: temporary overload or maintenance. Check: server capacity, recent deploys. 504 Gateway Timeout: upstream server didn't respond in time. Check: upstream performance, timeout settings, database queries. Troubleshooting: check error logs, monitor server resources (CPU, memory), verify dependencies (database, APIs), review recent code changes, check network connectivity. Users should: retry request, wait during maintenance, contact support if persists.

How do status codes affect SEO and search engine rankings?+

Search engines use status codes for crawling decisions: 200 OK: page indexed normally, good. 301 Permanent Redirect: link equity transfers to new URL, search engines update index. 302/307 Temporary: link equity stays with original, doesn't update index. 404 Not Found: page removed from index, some 404s are normal (old content). 410 Gone: stronger signal than 404, permanent removal. 503 Service Unavailable: temporary, search engines retry later, prolonged 503 can cause deindexing. Best practices: use 301 for permanent changes, fix 404s on important pages or redirect them, serve 410 for intentionally removed content, avoid soft 404s (200 status but "not found" content). Monitor crawl errors in Google Search Console.

What are some lesser-known but useful HTTP status codes?+

Useful specialized codes: 206 Partial Content: for range requests, video streaming, resumable downloads. 304 Not Modified: cached version still valid, saves bandwidth. 409 Conflict: request conflicts with resource state, duplicate entry, versioning conflict. 410 Gone: resource permanently deleted (stronger than 404). 418 I'm a teapot: April Fools joke (RFC 2324), actually implemented by some servers. 422 Unprocessable Entity: syntactically correct but semantically invalid data. 451 Unavailable For Legal Reasons: censorship, DMCA takedowns. 429 Too Many Requests: rate limiting, include Retry-After header. Use when: 206 for large files, 409 for optimistic locking, 422 for validation errors, 451 for compliance.

How should APIs use status codes for RESTful responses?+

RESTful API status code conventions: GET success: 200 OK with body, 404 if not found. POST create: 201 Created with Location header, 400 for invalid data, 409 for duplicate. PUT update: 200 OK with body, 204 No Content without body, 404 if doesn't exist. PATCH partial update: 200 OK, 204 No Content. DELETE: 204 No Content, 200 if returning deleted resource, 404 if already gone. Errors: 400 for validation errors, 401 for missing auth, 403 for insufficient permissions, 422 for semantic errors, 500 for server errors. Include error details in response body. Consistent patterns improve API usability.

What HTTP status codes should I use for API rate limiting and throttling?+

Rate limiting status codes: 429 Too Many Requests: standard for rate limit exceeded. Include headers: Retry-After: 60 (seconds to wait), X-RateLimit-Limit: 1000 (total allowed), X-RateLimit-Remaining: 0 (requests left), X-RateLimit-Reset: 1234567890 (Unix timestamp). Alternative: 503 Service Unavailable with Retry-After (for overload, not just rate limit). Client behavior: respect Retry-After header, implement exponential backoff, reduce request rate. Best practices: return 429 before processing request (fail fast), provide clear error messages, document rate limits, offer different tiers if applicable. Modern APIs use 429 exclusively for rate limiting, making it distinct from server errors.

This tool is provided for informational and educational purposes only. All processing happens in your browser — no data is sent to or stored on our servers. While we strive for accuracy, we make no warranties about the completeness or reliability of results.