Glowing Web Network

HTTP Status Code
Reference

Every HTTP status code from 100 to 599, plus Cloudflare's 1xxx codes — with plain-English meaning, the headers that go with it, and what each one means for web scrapers specifically.

Reference for developers • Deep-link any code with #429 • See also: HTTP Headers Checker

1xx Informational

100

Continue

1xx Informational

The server received the request headers and the client should proceed to send the request body.

When you see it

  • After sending a request with an Expect: 100-continue header
  • When uploading a large body and the server signals it is ready to receive it

Headers to check

Expect
101

Switching Protocols

1xx Informational

The server is switching protocols as requested by the client via the Upgrade header.

When you see it

  • During a WebSocket handshake
  • When upgrading an HTTP/1.1 connection to another protocol

Headers to check

UpgradeConnection
102

Processing

1xx Informational

The server has received and is processing the request, but no response is available yet (WebDAV).

When you see it

  • During long-running WebDAV operations
  • To keep a client from timing out while a request is processed
103

Early Hints

1xx Informational

Used to return preliminary headers (such as Link) before the final response.

When you see it

  • When a server hints at resources to preload before the full response is ready
  • On CDNs that support early hints for performance

Headers to check

Link

2xx Success

200

OK

2xx Success

The request succeeded. The meaning of success depends on the HTTP method used.

When you see it

  • A standard successful GET, POST, or other request
  • The body contains the requested representation

For scrapers

A 200 is the goal, but it is not a guarantee the body is what you expect. Anti-bot challenge pages, CAPTCHAs, and "are you a human" interstitials are frequently served with a 200. Always validate the body, not just the status code.

Related: 206, 403
201

Created

2xx Success

The request succeeded and a new resource was created as a result.

When you see it

  • After a successful POST or PUT that creates a resource
  • A Location header usually points to the new resource

Headers to check

Location
202

Accepted

2xx Success

The request was accepted for processing, but the processing has not completed.

When you see it

  • When work is queued asynchronously
  • On APIs that return a job ID to poll later
204

No Content

2xx Success

The request succeeded but there is no content to return in the response body.

When you see it

  • After a successful DELETE
  • On PUT/PATCH requests that intentionally return nothing
206

Partial Content

2xx Success

The server is delivering only part of the resource due to a Range header sent by the client.

When you see it

  • When resuming a download
  • During chunked/range requests for large files or media streaming

Headers to check

RangeContent-RangeAccept-Ranges
Related: 200

3xx Redirect

301

Moved Permanently

3xx Redirect

The resource has permanently moved to a new URL given in the Location header.

When you see it

  • When a URL has permanently changed
  • On HTTP-to-HTTPS or non-www-to-www redirects

Headers to check

Location

For scrapers

Follow the Location header and update your seed URLs — chasing the same old URL wastes requests on a redirect every time. Note some scrapers must preserve the method; 301 historically allowed clients to switch POST to GET.

Related: 302, 307, 308
302

Found

3xx Redirect

The resource temporarily resides at a different URL given in the Location header.

When you see it

  • On temporary redirects
  • After a login or form post that redirects elsewhere

Headers to check

Location

For scrapers

A redirect to a login or challenge page is a common soft block. If a 200 page suddenly 302s to /login or a captcha route, treat it as a session or fingerprint problem.

Related: 301, 303, 307
303

See Other

3xx Redirect

The response can be found at another URL using a GET request.

When you see it

  • After a POST, to redirect the client to a result page via GET
  • In the Post/Redirect/Get pattern

Headers to check

Location
304

Not Modified

3xx Redirect

The resource has not changed since the version specified by the request headers; use the cached copy.

When you see it

  • On conditional requests with If-Modified-Since or If-None-Match
  • When a CDN or browser cache revalidates

Headers to check

If-Modified-SinceIf-None-MatchETagLast-Modified

For scrapers

If you send conditional headers (ETag, If-Modified-Since) you may get a 304 with an empty body. Strip those headers when you actually want the full content back.

307

Temporary Redirect

3xx Redirect

The resource temporarily resides at a different URL, and the request method must not change.

When you see it

  • On temporary redirects where the method (e.g. POST) must be preserved
  • As a method-safe alternative to 302

Headers to check

Location
Related: 302, 308
308

Permanent Redirect

3xx Redirect

The resource has permanently moved, and the request method must not change.

When you see it

  • On permanent redirects where the method must be preserved
  • As a method-safe alternative to 301

Headers to check

Location
Related: 301, 307

4xx Client Error

400

Bad Request

4xx Client Error

The server cannot process the request due to a client error (malformed syntax, invalid framing).

When you see it

  • A malformed request body or query string
  • Invalid JSON or missing required parameters

For scrapers

Often a sign your request is malformed — bad headers, a corrupt cookie, or a body that does not match the Content-Type. Diff your request against a working browser request.

401

Unauthorized

4xx Client Error

Authentication is required and has either failed or not been provided.

When you see it

  • When a request lacks valid authentication credentials
  • When a token or session has expired

Headers to check

WWW-AuthenticateAuthorization

For scrapers

401 means "who are you?" — the server wants credentials. This differs from 403, which means "I know who you are and you still cannot have this." Check your token, API key, or session cookie.

Related: 403, 407
403

Forbidden

4xx Client Error

The server understood the request but refuses to authorize it.

When you see it

  • When access is denied regardless of authentication
  • When an anti-bot system declines to serve a request
  • On geo-restricted or IP-blocked content

Headers to check

cf-rayServerSet-Cookie

For scrapers

The classic scraper block. A 403 with no real content usually means the request was identified as automated — IP reputation, TLS or browser fingerprint, or missing/odd headers. Compare a real browser request against your client request header-by-header to find the mismatch.

Related: 401, 429, 503
404

Not Found

4xx Client Error

The server cannot find the requested resource.

When you see it

  • When a URL does not exist
  • When a resource was removed without a redirect

For scrapers

Sometimes a 404 is a soft block (a "cloaked" 404) rather than a genuine missing page. If a real browser UA returns 200 for the same URL while a bare client gets 404, you are likely being fingerprinted.

405

Method Not Allowed

4xx Client Error

The request method is known by the server but is not supported by the target resource.

When you see it

  • Sending POST to a GET-only endpoint (or vice versa)
  • When an API route does not allow the chosen verb

Headers to check

Allow
406

Not Acceptable

4xx Client Error

The resource cannot produce a response matching the Accept headers sent by the client.

When you see it

  • When the Accept, Accept-Language, or Accept-Encoding headers cannot be satisfied
  • On strict content negotiation

Headers to check

AcceptAccept-EncodingAccept-Language
407

Proxy Authentication Required

4xx Client Error

The client must first authenticate itself with the proxy.

When you see it

  • When a request goes through a proxy that needs credentials
  • When proxy username/password is missing or wrong

Headers to check

Proxy-AuthenticateProxy-Authorization

For scrapers

A 407 almost always means your proxy credentials are wrong or missing. Check the username, password, and that the credentials are passed in the proxy URL or a Proxy-Authorization header.

Related: 401
408

Request Timeout

4xx Client Error

The server timed out waiting for the request.

When you see it

  • When the client is too slow to send a complete request
  • On idle keep-alive connections that the server closes

Headers to check

Connection
409

Conflict

4xx Client Error

The request conflicts with the current state of the target resource.

When you see it

  • On concurrent edits to the same resource
  • When a uniqueness constraint is violated
410

Gone

4xx Client Error

The resource is permanently gone and no forwarding address is known.

When you see it

  • When content was intentionally and permanently removed
  • As a stronger signal than 404 to drop the URL

For scrapers

Unlike a 404, a 410 is a strong signal to permanently remove the URL from your crawl queue — the server is telling you it will never come back.

411

Length Required

4xx Client Error

The server refuses the request because it lacks a defined Content-Length header.

When you see it

  • On POST/PUT requests sent without Content-Length
  • When chunked encoding is not accepted

Headers to check

Content-Length
413

Payload Too Large

4xx Client Error

The request body is larger than the server is willing or able to process.

When you see it

  • On file uploads that exceed a size limit
  • When posting an oversized JSON body

Headers to check

Content-LengthRetry-After
414

URI Too Long

4xx Client Error

The URI requested by the client is longer than the server is willing to interpret.

When you see it

  • When a GET request packs too much data into the query string
  • On extremely long encoded URLs
415

Unsupported Media Type

4xx Client Error

The media format of the request body is not supported by the server.

When you see it

  • When the Content-Type does not match what the endpoint expects
  • Posting form data to a JSON-only endpoint

Headers to check

Content-TypeAccept
418

I'm a teapot

4xx Client Error

An April Fools joke from RFC 2324 — the server refuses to brew coffee because it is a teapot.

When you see it

  • On endpoints that use it as a playful catch-all
  • Occasionally used by services as a deliberate "blocked" signal

For scrapers

Some services repurpose 418 as a non-standard "you have been flagged" response. If you get a teapot, treat it like a soft block and review your request fingerprint.

422

Unprocessable Entity

4xx Client Error

The request was well-formed but contains semantic errors that prevent processing.

When you see it

  • On validation failures in a syntactically valid request
  • Common in REST/JSON APIs for field-level errors
423

Locked

4xx Client Error

The resource being accessed is locked (WebDAV).

When you see it

  • During WebDAV operations on a locked resource
425

Too Early

4xx Client Error

The server is unwilling to risk processing a request that might be replayed.

When you see it

  • On requests sent in TLS 1.3 early data (0-RTT)
  • When replay protection is enforced
429

Too Many Requests

4xx Client Error

The client has sent too many requests in a given amount of time ("rate limiting").

When you see it

  • After making too many requests too quickly
  • After an API quota is exhausted
  • When a per-IP or per-account rate limit is hit

Headers to check

Retry-AfterX-RateLimit-RemainingX-RateLimit-Reset

For scrapers

429 is the most common signal you have crossed a rate-limit threshold. Honour the Retry-After header, slow down, rotate IPs, or spread load across more sessions. Hammering through a 429 usually escalates to a longer block.

Related: 403, 503, 1015
451

Unavailable For Legal Reasons

4xx Client Error

The resource is unavailable for legal reasons, such as censorship or a takedown.

When you see it

  • On content blocked by law or court order
  • On geo-restricted content blocked for legal compliance

5xx Server Error

500

Internal Server Error

5xx Server Error

A generic server error — something went wrong but the server cannot be more specific.

When you see it

  • On an unhandled exception in server code
  • When a backend dependency fails unexpectedly

For scrapers

A 500 is the server's fault, not yours — but a sudden burst of 500s on previously-working requests can also indicate you triggered a defensive code path. Retry with backoff; if it persists for one URL only, the page itself is broken.

501

Not Implemented

5xx Server Error

The server does not support the functionality required to fulfil the request.

When you see it

  • When an HTTP method is not supported at all
  • On unimplemented API features
502

Bad Gateway

5xx Server Error

A server acting as a gateway or proxy received an invalid response from an upstream server.

When you see it

  • When a load balancer or reverse proxy cannot reach the origin
  • During origin deploys or crashes

Headers to check

Retry-Aftercf-ray

For scrapers

A 502 is upstream infrastructure failing, often transient. Retry with exponential backoff. Persistent 502s through a CDN can also mean the origin is rejecting the edge's forwarded request.

Related: 503, 504, 521
503

Service Unavailable

5xx Server Error

The server is not ready to handle the request — usually overloaded or down for maintenance.

When you see it

  • During maintenance windows
  • When the server is overloaded
  • On interstitial anti-bot challenge pages

Headers to check

Retry-Aftercf-raycf-mitigated

For scrapers

A 503 is not always "server overloaded." Many anti-bot products return a 503 while serving a JavaScript challenge page. Check the body and headers (e.g. cf-mitigated) — if it is a challenge, you need a client that can complete it, not just a retry.

Related: 429, 502, 504, 1015
504

Gateway Timeout

5xx Server Error

A gateway or proxy did not receive a timely response from an upstream server.

When you see it

  • When the origin is too slow to respond
  • On long-running requests that exceed proxy timeouts

Headers to check

Retry-After

For scrapers

A 504 means the edge waited too long for the origin. Increase your client timeout and retry; if you control the request, simplify it (smaller payloads, fewer redirects) to come in under the gateway's limit.

Related: 502, 503
505

HTTP Version Not Supported

5xx Server Error

The HTTP protocol version used in the request is not supported by the server.

When you see it

  • When a client uses an HTTP version the server refuses
  • On misconfigured or very old servers
508

Loop Detected

5xx Server Error

The server detected an infinite loop while processing the request (WebDAV).

When you see it

  • During WebDAV operations that recurse infinitely
511

Network Authentication Required

5xx Server Error

The client needs to authenticate to gain network access (e.g. a captive portal).

When you see it

  • Behind a captive portal on public Wi-Fi
  • When a network gateway requires sign-in

Cloudflare-specific (5xx + 1xxx)

520

Web Server Returned an Unknown Error

Cloudflare-specific (5xx + 1xxx)

Cloudflare received an empty, unknown, or unexpected response from the origin server.

When you see it

  • When the origin returns a malformed or empty response to Cloudflare
  • On origin crashes, resets, or protocol violations

Headers to check

cf-rayServer

For scrapers

520 is a catch-all Cloudflare error for an origin that misbehaved. It is usually transient and origin-side — retry with backoff. If it only appears for your client, the origin may be rejecting the forwarded request.

Related: 521, 522, 502, 503
521

Web Server Is Down

Cloudflare-specific (5xx + 1xxx)

Cloudflare cannot establish a connection to the origin server.

When you see it

  • When the origin is offline or refusing connections
  • When the origin firewall blocks Cloudflare IPs

Headers to check

cf-ray

For scrapers

521 means Cloudflare cannot reach the origin at all. Nothing you change client-side will help while the origin is down — retry later.

Related: 520, 522
522

Connection Timed Out

Cloudflare-specific (5xx + 1xxx)

Cloudflare timed out trying to establish a TCP connection to the origin.

When you see it

  • When the origin is overloaded or unreachable
  • On network issues between Cloudflare and the origin

Headers to check

cf-ray
Related: 520, 521, 524
523

Origin Is Unreachable

Cloudflare-specific (5xx + 1xxx)

Cloudflare cannot reach the origin server, often due to a routing or DNS problem.

When you see it

  • When the origin DNS or routing is misconfigured
  • When the origin IP is unreachable from Cloudflare

Headers to check

cf-ray
524

A Timeout Occurred

Cloudflare-specific (5xx + 1xxx)

Cloudflare connected to the origin but did not receive a timely HTTP response.

When you see it

  • When the origin takes longer than 100 seconds to respond
  • On long-running requests behind Cloudflare

Headers to check

cf-ray

For scrapers

524 is the Cloudflare equivalent of a gateway timeout — the origin was reached but answered too slowly. Simplify the request or retry; you cannot extend Cloudflare's origin timeout from the client.

Related: 522, 504
525

SSL Handshake Failed

Cloudflare-specific (5xx + 1xxx)

The SSL/TLS handshake between Cloudflare and the origin failed.

When you see it

  • When the origin TLS configuration is invalid or incompatible
  • On certificate or cipher mismatches between Cloudflare and origin

Headers to check

cf-ray
526

Invalid SSL Certificate

Cloudflare-specific (5xx + 1xxx)

Cloudflare could not validate the SSL certificate presented by the origin.

When you see it

  • When the origin certificate is expired, self-signed, or untrusted
  • When Full (strict) SSL mode is enabled and validation fails

Headers to check

cf-ray
530

Origin DNS Error

Cloudflare-specific (5xx + 1xxx)

Usually paired with a Cloudflare 1xxx error — typically an origin DNS resolution failure.

When you see it

  • When Cloudflare cannot resolve the origin hostname
  • Often shown alongside a specific 1xxx code in the body

Headers to check

cf-ray
1015

You Are Being Rate Limited

Cloudflare-specific (5xx + 1xxx)

Cloudflare is rate-limiting the client based on a rate-limiting rule configured by the site owner.

When you see it

  • After exceeding a Cloudflare rate-limiting rule
  • When too many requests come from one IP in a short window

Headers to check

cf-rayRetry-After

For scrapers

Cloudflare 1015 is rate limiting at the edge, before your request reaches the origin. Slow down, rotate IPs, and spread requests across more sessions. It behaves much like a 429 but is enforced by Cloudflare's network.

Related: 429, 503, 520

Seeing 403s and 429s in your scraper?

Scrappey handles rate limits, retries, and challenge pages for you — returning clean HTML, JSON, or Markdown from any URL with residential proxies included.

Get 150 Free Credits

Concept map

How status codes relate

Each node is a status code, grouped by class. Lines connect codes that are commonly confused or that scrapers see together. Hover to highlight, click for the meaning and a jump link.

52 codes · 27 links
Hover · click a code
1xx2xx3xx4xx5xxCF1001011021032002012022042063013023033043073084004014034044054064074084094104114134144154184224234254294515005015025035045055085115205215225235245255265301015
1xx 2xx 3xx 4xx 5xx CF

Frequently Asked Questions

What's the difference between a 401 and a 403?

A 401 Unauthorized means the server does not know who you are — you need to provide valid credentials. A 403 Forbidden means the server knows who you are (or does not care) and still refuses access. For scrapers, a 403 usually points to IP reputation, fingerprinting, or header issues rather than missing credentials.

Is a 429 always rate limiting, or can it mean something else?

429 Too Many Requests is the standard rate-limit signal, and that is almost always what it means. Honour the Retry-After header, slow down, and rotate IPs. Occasionally a service uses 429 as a generic "too aggressive" block even when you are under the published quota, so also review request volume and concurrency.

Why does the same request return 200 in Postman but 403 in my scraper?

The two clients send different fingerprints. Postman, a real browser, and a bare HTTP library differ in TLS handshake, HTTP/2 frame ordering, header order, and User-Agent. Anti-bot systems read those signals, so one client gets a 200 while another gets a 403 for the identical URL. Diff the full request to find the mismatch.

Is 503 always "server overloaded"?

No. While 503 Service Unavailable can mean overload or maintenance, many anti-bot products return a 503 while serving a JavaScript challenge page. Check the body and headers (such as cf-mitigated) — if it is a challenge rather than a real outage, retrying alone will not help; you need a client that can complete the challenge.

What are Cloudflare's 1xxx error codes?

Cloudflare uses a set of four-digit codes for edge-specific conditions. The most common is 1015 (You Are Being Rate Limited), enforced at Cloudflare's network before the request reaches the origin. They are distinct from standard HTTP codes and usually appear in the response body alongside a 5xx status.

footer-frame

Start building with Scrappey

Try It For Free. No Subscription Required. No Credit Card Required. Instant Set-Up. 150 Free Requests Are Waiting For You!