408 Request TimeoutWhat 408 Request Timeout means
HTTP 408 is the server saying: a connection was opened to me, but the complete request never arrived in time. Every web server enforces an idle timeout between accepting a TCP connection and receiving the full request line, headers, and body. If your client connects and then stalls — slow network, a large body trickling in, or a connection opened and never used — the server responds 408 and closes the connection.
Do not confuse 408 with its neighbors. A 504 means a server that accepted your request timed out waiting on another server behind it. A client-side timeout (curl error 28, requests.exceptions.Timeout) means your client gave up, not the server. 408 is specifically the server timing out on you while you were still sending.
One quirk worth knowing: clients that hold keep-alive connections open sometimes receive a 408 on an idle connection the server is reaping. Those are harmless — well-behaved clients retry on a fresh connection automatically. Persistent 408s on active requests are the ones worth debugging.