What is a 408 error?
A 408 Request Timeout means the server was waiting for the rest of your request and closed the connection before it arrived. The direction matters: this is about your request being slow to reach the server, not about the server being slow to answer.
That distinction is what separates it from a 504, which is a gateway giving up on an upstream response. A 408 points at the connection between you and the server, and often at your own client.
What causes it in a scraper
- An idle keep-alive connection. The most common cause by far. A connection is opened, held in a pool, and reused after the server's idle timeout has already passed. The server closes it and answers 408 on the next request through it.
- A slow or unstable network path. A proxy chain adding latency, or a residential connection with poor throughput, can push a request past the server's patience.
- Large uploads on a slow link. POSTing a big body over a slow connection can exceed the read timeout before the body finishes.
- Aggressive concurrency. Opening more connections than the path can carry means each one gets a fraction of the bandwidth, and slow requests start timing out even though none of them is individually large.
How to respond
408 is one of the few status codes where an immediate retry is genuinely correct. The specification explicitly says the client may repeat the request without modification, and a stale pooled connection will usually succeed the moment a fresh one is opened.
Beyond the retry, the durable fixes are: lower the keep-alive idle timeout in your client so it recycles connections before the server does, and reduce concurrency if 408s cluster at peak parallelism rather than appearing at random.
Treat a persistent 408 with suspicion, though. Some anti-bot layers will hold a connection open and let it time out rather than returning an honest refusal, since a timeout costs the attacker more time than a fast rejection. If a browser loads the page immediately while your client times out repeatedly, the timeout is a decision rather than a network condition.
Go deeper on the blog
Last updated: Aug 16, 2026