---
title: 408 Request Timeout
description: What HTTP 408 means, how it differs from 504 and client-side timeouts, and what slow-request timeouts reveal about your infrastructure.
canonical: https://watchfor.io/docs/reference/http-status-codes/408
---

# 408 Request Timeout

What HTTP 408 means, how it differs from 504 and client-side timeouts, and what slow-request timeouts reveal about your infrastructure.

**408 Request Timeout** means the server was waiting for the client to finish
sending its request — and gave up. The connection was open, but the request
didn't arrive completely within the server's timeout window.

## 408 vs the other timeouts

| Symptom | What timed out |
| --- | --- |
| **408** | The *client* was too slow sending the request |
| [504](/docs/reference/http-status-codes/504) | An *upstream server* was too slow answering a proxy |
| Client-side timeout (no status at all) | The *response* didn't arrive before the client gave up |

A 408 is the rarest of the three in practice — many servers just close the
connection silently instead of sending it.

## Common causes

- **Slow or flaky client networks** — mobile clients uploading large bodies
  over poor connections
- **Stalled uploads** — the client advertised a `Content-Length` and then
  stopped sending mid-body
- **Keep-alive housekeeping** — some servers send 408 when closing an idle
  persistent connection; browsers retry transparently, but you'll see them in
  logs
- **Aggressive server timeouts** — `client_body_timeout` (nginx) or
  `RequestReadTimeout` (Apache) set lower than real clients need
- **Slowloris-style attacks** — deliberately slow request trickles designed to
  exhaust connections; timeouts sending 408 are the defense working

## Debugging

Sporadic 408s from real users usually track client network quality — check
whether they cluster by geography or mobile carrier. A spike in 408s can also
be the early signature of a slow-request attack; look at how many connections
are open in a "reading request" state.

If your own API calls time out, distinguish where: a 408 *status* means the
server judged you slow; an exception with no response means your client
timeout fired first. The free [ping test](/ping-test) and
[traceroute](/traceroute-online) show whether latency and loss on the path
explain slow request delivery, and a
[multi-region HTTP monitor](/docs/monitors/web) tells you whether slowness is
global or one network's problem.

---

Canonical page: https://watchfor.io/docs/reference/http-status-codes/408 · All docs: https://watchfor.io/docs · Site guide: https://watchfor.io/llms.txt
