HTTP Errors

What Is a 200 Status Code (OK)?

What Is a 200 Status Code (OK)? — conceptual illustration
On this page

HTTP 200 OK is the standard "success" status code: the server got your request, handled it, and sent back the response you expected. For a GET request (asking for a page), 200 means the page content is in the reply. For a POST request (sending data), it means the action completed. 200 is the default "everything worked" signal. But for web scrapers there's a catch: a 200 does not always mean the page actually contains the data you wanted.

Quick facts

Status code200
Category2xx Success
Default success responseBody contains the requested resource
Common gotcha (scraping)200 + bot-detection HTML body ("soft block")

What a 200 OK means

The HTTP spec (the rulebook for how browsers and servers talk) says a 200 means the request was understood, accepted, and the response body holds the result. For a GET, that body is the content at the URL you asked for. For a POST, it's usually a summary of what the action did. In theory, servers should never send 200 when something went wrong — that's the job of the 4xx codes (your mistake) and 5xx codes (the server's mistake). In practice, many servers return 200 anyway and just put an error message inside the body, because that's easier than setting the correct code. Because servers follow the rules loosely, a scraper can't trust a 200 as proof of success without also checking what's actually in the body.

Why 200 isn't always success for scrapers

Bot-detection systems often answer with a 200 even when they're blocking you — serving a challenge page, a "please enable JavaScript" notice, or an empty layout instead of the real content. Your HTTP client sees status 200 and calls it a win. Your parser then runs over the wrong HTML and either crashes or quietly pulls out nothing. This is called a soft block, and it's the sneakiest failure in scraping: if you only watch status codes, you never notice it happened. Solid production scrapers check two things after every fetch: the status code AND a structural signal that the expected content is really there (a known CSS selector, a specific JSON field, or a minimum response size).

How to validate a 200 response correctly

Use three layered checks. First, confirm the status code is 200 — if it's anything else, stop here and treat it as a failure. Second, confirm the response body is at least a reasonable size — a real product page is rarely under 5KB, so a 1KB "200 OK" is almost certainly a block page. Third, confirm at least one expected element exists — for example, `soup.select_one('.product-title')` should return an element, not None. If any of the three checks fail, treat the request as failed, queue a retry with a different proxy or fingerprint, and bump a separate "soft block" counter. That separate counter lets you tell "the site is broken" apart from "we're being detected."

Related terms

What Is the 403 Status Code (403 Forbidden Error)?
HTTP 403 Forbidden means the server understood your request but refuses to answer it. The difference from 401 is simple: 401 means "we don't…
What Is the 429 Status Code (429 Error)?
HTTP 429 Too Many Requests is the status code a server returns when a client has sent more requests in a given window than the server's rate…
What Is the 503 Status Code (503 Service Unavailable Error)?
HTTP 503 Service Unavailable means the server can't handle your request right now — usually because it's overloaded, under maintenance, or d…
What Is Anti-Bot Detection?
Anti-bot detection is the set of techniques websites use to tell automated traffic apart from real human visitors — and then block, challeng…
What Is a 404 Error?
HTTP 404 Not Found is the server's way of saying "I understood your request, but there is nothing at this address." The server is working fi…
What Is the 401 Status Code (401 Unauthorized)?
HTTP 401 Unauthorized means the server doesn't know who you are because your request didn't include valid login credentials. Think of it as …
What Is the 405 Status Code (405 Method Not Allowed)?
HTTP 405 Method Not Allowed means the page exists, but it won't accept the HTTP method (the verb, like GET or POST) you used to ask for it. …
What Is the 451 Status Code (451 Unavailable For Legal Reasons)?
HTTP 451 "Unavailable For Legal Reasons" means a server is refusing to give you a page because the law — not a technical problem — says it c…

Concept map

How 200 Status Code connects

The terms most directly tied to this one. Hover a node to see its neighbours, click to preview, drag to rearrange.

0 terms · 0 connections
You are here · HTTP Errors
Building map…

Frequently asked questions

Does 200 mean my scraper worked?

Only if the body also contains what you asked for. A 200 that returns a "please verify you're human" page in the body is a failed scrape — it just looks successful at the HTTP layer.

What's the difference between 200 and 204?

200 OK means success with content in the body. 204 No Content means success with an empty body — common for a DELETE, or for a PUT request that has nothing to send back.

Can I get a 200 from a CAPTCHA page?

Yes — most CAPTCHA challenge pages return 200, with the challenge HTML sitting in the body. To catch this you have to check the content itself, not just the status code.

Should my scraper retry on 200?

Only if your after-fetch validation fails. If the status is 200 and the body looks correct, you're done. If the status is 200 but the body looks like a block page, retry with a different identity (a new proxy or fingerprint).

Last updated: 2026-05-31