408 Request Timeout

Le client a mis trop de temps à envoyer la requête.

Quand l’utiliser

Connexions inactives. Les clients peuvent réessayer sans risque.

Causes courantes et solutions

Le serveur a fermé la connexion parce que le client n’a pas envoyé de requête complète à temps. Causes courantes : des réseaux mobiles lents pendant de gros envois, des connexions ouvertes de manière spéculative par les navigateurs qui n’envoient ensuite rien, et des connexions keep-alive inactives au-delà de la limite du serveur. Dans nginx, les délais correspondants sont client_header_timeout et client_body_timeout, tous deux à 60 secondes par défaut.

Les navigateurs réessaient de manière transparente quand une connexion keep-alive inactive est fermée, donc les utilisateurs voient rarement un 408 ; on le remarque surtout dans les logs d’accès, où les entrées sans ligne de requête proviennent de préconnexions et sont sans danger. Pour les gros envois sur des liaisons lentes, augmentez client_body_timeout ou passez à des envois découpés et reprenables. Les clients peuvent réessayer sans risque, puisque le serveur n’a jamais traité la requête.

Erreur client (4xx)

Les codes 4xx sont des erreurs client : la requête elle-même est incorrecte, non autorisée ou vise quelque chose qui n’existe pas. Renvoyer la même requête ne servira à rien.

À quoi ça ressemble

HTTP/1.1 408 Request Timeout

Comment l’envoyer

Node.js / Expressres.status(408).end()
Python / Flaskreturn '', 408
nginxreturn 408;

Comment le vérifier

curl -s -o /dev/null -w "%{http_code}\n" https://example.com/

Ouvrir l’outil Codes de statut HTTP