Signification
La copie en cache du client est toujours valide, donc le serveur n'envoie pas de corps. Il répond à une requête conditionnelle avec If-None-Match ou If-Modified-Since.
Causes courantes
- L'ETag de If-None-Match correspond à la version actuelle
- La ressource n'a pas changé depuis If-Modified-Since
- Un navigateur revalide une ressource en cache
Comment corriger
Côté client ou visiteur
Utilisez le corps en cache. Si le contenu semble périmé, le validateur est peut-être erroné ; forcez le rechargement ou vérifiez la génération des ETag.
Côté propriétaire du site ou de l’API
Générez des ETag stables (identiques sur tous les serveurs derrière un répartiteur de charge) et envoyez les mêmes en-têtes de cache qu'avec un 200.
Exemple de réponse
HTTP/1.1 304 Not Modified
Date: Tue, 07 Oct 2025 09:30:00 GMT
Server: nginx
ETag: "33a64df5"
Cache-Control: max-age=3600 Spécification
FAQ
› 304 est-il une erreur ?
Non. Il économise de la bande passante en indiquant au client que son cache est à jour.
› Pourquoi les utilisateurs voient-ils d'anciens fichiers après un déploiement ?
Les en-têtes de cache autorisent des copies périmées. Utilisez des noms de fichiers avec empreinte pour les ressources et un max-age court avec revalidation pour le HTML.