4xx Client error · RFC 9110 §15.5.9

408 Request Timeout

The client took too long to send the request.

What 408 means

The server opened the connection and waited for a complete request that never arrived, then gave up. It is about the client side of the exchange; slow servers produce 504 or 503, not 408.

Browsers open speculative connections they may never use, so a few 408s in server logs are normal background noise.

Common causes

  • Very slow or stalled upload from the client.
  • Idle keep-alive connections closed by the server (nginx client_header_timeout, client_body_timeout).
  • Mobile clients losing connectivity mid-request.

How to fix it

  • Raise the client body timeout for upload endpoints.
  • Clients should retry idempotent requests on 408; it is safe by definition.

What it looks like

A typical response:

HTTP/1.1 408 Request Timeout
Connection: close

The same event in an nginx access log (the status is the number after the request line):

203.0.113.7 - - [10/Sep/2026:10:12:01 +0000] "GET /api/orders HTTP/1.1" 408 153 "-" "Mozilla/5.0"

Check it with curl

-i prints the status line and headers, and -w '%{http_code}' prints only the number, which is handy in scripts and health checks. Replace the URL with yours:

curl -sS -o /dev/null -w '%{http_code} %{time_total}s\n' https://example.com/api/orders

Compare what curl sees with what the browser sees. A different status from the same URL usually means a cache, a CDN edge or a cookie is in the way.

Investigating a run of 408s? Paste the log excerpt into Log Share to get line numbers, highlighting and an expiring link for whoever is on call with you.

FAQ

What is status 499 in nginx logs?

A non-standard nginx code meaning the client closed the connection before the server responded, often a browser navigating away or a client-side timeout shorter than the server's processing time.