408 Request Timeout : quand le client est trop lent
408 Request Timeout : le serveur a renoncé à attendre que le client finisse d’envoyer sa requête et a fermé la connexion.
408 Request Timeout signifie que le serveur a renoncé à attendre que le client finisse d’envoyer sa requête. Il s’agit d’une requête entrante trop lente, et non d’un serveur lent à répondre, ce que décrivent 504 et le 524 de Cloudflare.
Définition
La RFC 9110, section 15.5.9 précise que le serveur « n’a pas reçu de message de requête complet dans le délai qu’il était prêt à attendre ». Le client peut répéter la requête. Si la connexion ne peut pas être réutilisée, le serveur doit la fermer, ce qui explique pourquoi les réponses 408 portent généralement Connection: close.
Causes courantes
- Connexions inactives. Les navigateurs ouvrent des connexions à l’avance et ne s’en servent parfois jamais. Quand le serveur ferme une telle connexion après son délai, il peut consigner ou envoyer un 408 qu’aucun visiteur ne voit jamais.
- Envois lents sur des réseaux mobiles ou instables, qui dépassent le délai du serveur pour le corps de la requête.
- Délais trop agressifs, réglés pour repousser les attaques par requêtes lentes.
- Un serveur surchargé qui ne lit pas les requêtes assez vite.
Impact SEO
Les requêtes de Googlebot sont de petits GET envoyés rapidement : il devrait donc rarement provoquer un 408. Si cela arrive, prenez-le au sérieux : la documentation de Google sur les codes de statut traite tous les codes 4xx autres que 429 de la même façon, et les URL qui continuent de renvoyer 408 peuvent donc sortir de l’index. Consultez le rapport sur les statistiques d’exploration de la Search Console pour repérer les pics, et cherchez d’éventuels problèmes réseau entre les robots et votre serveur.
Comment le corriger
De nombreuses lignes 408 dans les journaux sont un bruit inoffensif dû à des connexions inutilisées. Pour les vraies défaillances, ajustez les délais à votre trafic :
# Nginx (60 s par défaut pour les deux)
client_header_timeout 30s;
client_body_timeout 120s; # autorise les envois lents
# Apache (mod_reqtimeout)
RequestReadTimeout header=20-40,MinRate=500 body=60,MinRate=500
Pour les gros fichiers, envisagez des envois reprenables ou par morceaux, afin qu’une seule connexion lente ne fasse pas échouer tout le transfert. Si les envois échouent à cause de leur taille plutôt que de leur lenteur, le serveur répond plutôt 413.
Comment vérifier
Passez l’URL dans le vérificateur de statut HTTP. Une page qui renvoie 408 à une requête simple et rapide indique un problème de serveur plutôt qu’un client lent, et le temps de réponse affiché aide à repérer un serveur surchargé.
HTTP/1.1 408 Request Timeout
Connection: close
Content-Type: text/html
Content-Length: 221 Questions fréquentes
Quelle est la différence entre 408 et 504 ?
408 signifie que le client a été trop lent à envoyer sa requête au serveur. 504 signifie qu’un proxy ou une passerelle a attendu trop longtemps la réponse du serveur placé derrière lui.
Pourquoi mes journaux affichent-ils beaucoup d’erreurs 408 ?
Souvent, elles proviennent de connexions que les navigateurs ont ouvertes à l’avance sans jamais s’en servir ; le serveur les ferme après son délai et consigne un 408. Si les vrais utilisateurs ne sont pas touchés, elles sont généralement inoffensives.
Un client peut-il réessayer après un 408 ?
Oui. La RFC 9110 indique que le client peut répéter la requête, généralement sur une nouvelle connexion.