Éviter les requêtes réseau inutiles avec le cache HTTP
Réduisez les requêtes réseau inutiles et accélérez les visites répétées grâce à Cache-Control, ETag et la revalidation par le serveur.
Récupérer des ressources sur le réseau est à la fois lent et coûteux. Les réponses volumineuses multiplient les allers-retours, votre page ne s’affiche pas tant que ses ressources essentielles ne sont pas téléchargées, et chaque requête superflue gaspille le forfait de données de l’internaute. Le cache HTTP du navigateur est votre première ligne de défense : il n’est ni le plus puissant ni le plus flexible des mécanismes, mais il est efficace, compatible avec tous les navigateurs et demande peu d’efforts. Pour le SEO, réduire les requêtes réseau accélère les visites répétées, un levier que l’on retrouve dès qu’on cherche à optimiser le cache pour les visites répétées, ce qui améliore les Core Web Vitals et l’expérience perçue par vos visiteurs comme par les moteurs.
Concrètement, chaque requête du navigateur passe d’abord par le cache : s’il existe une réponse valide, elle est réutilisée, ce qui supprime la latence réseau et le coût de transfert. Ce comportement se pilote par des en-têtes de réponse que vous configurez sur votre serveur.
Le cache HTTP n’est ni le plus sophistiqué des mécanismes ni le plus souple, mais c’est la première ligne de défense que je remets en ordre sur la plupart des sites. Chaque requête réseau évitée, c’est de la vitesse gagnée sur les visites répétées et des données économisées pour l’internaute. Maîtriser les directives Cache-Control et les bonnes durées suffit déjà à beaucoup améliorer les choses.
Les directives Cache-Control à connaître
L’en-tête Cache-Control accepte une liste de directives séparées par des virgules qui définissent comment et combien de temps une réponse peut être stockée. Omettre cet en-tête ne désactive pas le cache, qui reste une étape clé de le chemin critique de rendu : le navigateur devine alors un comportement, souvent au détriment du contrôle. Mieux vaut donc être explicite.
| Directive Cache-Control | Rôle |
|---|---|
no-cache |
Autorise le stockage mais impose une revalidation auprès du serveur avant chaque réutilisation |
no-store |
Interdit tout stockage : la ressource est récupérée intégralement à chaque requête |
private |
Le navigateur peut mettre en cache, mais pas les caches intermédiaires (CDN, proxys) |
public |
La réponse peut être stockée par n’importe quel cache |
max-age |
Durée en secondes pendant laquelle la réponse reste valide (ex. max-age=31536000 pour un an) |
Voici quelques combinaisons d’en-têtes types et leur signification concrète.
# Cache navigateur et intermediaires pendant 1 jour
Cache-Control: max-age=86400
# Cache navigateur uniquement, 10 minutes
Cache-Control: private, max-age=600
# Ressource versionnee, cache 1 an
Cache-Control: public, max-age=31536000
# Jamais en cache, recuperee a chaque requete
Cache-Control: no-store
Revalider avec ETag et Last-Modified
Quand une réponse mise en cache expire, le navigateur n’a pas forcément besoin de la retélécharger. L’en-tête ETag porte un petit jeton, généralement un hachage du contenu, que le navigateur renvoie ensuite via If-None-Match. L’en-tête Last-Modified joue le même rôle, mais sur une base temporelle plutôt que sur le contenu, et déclenche l’en-tête If-Modified-Since.
À la requête suivante, le serveur compare le jeton ou la date reçue avec sa version courante. S’ils correspondent, il renvoie une réponse 304 Not Modified, très légère, qui dit au navigateur de réutiliser sa copie. C’est bien plus rapide que de renvoyer la ressource entière. ETag est généralement préférable, car plus précis que la stratégie temporelle de Last-Modified.
Quelle durée de cache choisir
La décision repose sur deux scénarios. Pour les URL versionnées, dont le nom inclut une empreinte comme style.x234dff.css, vous pouvez adopter la mise en cache de longue durée en fixant max-age=31536000 : changer le contenu change le nom, donc l’invalidation est propre. Pour les URL non versionnées comme le HTML, laissez le serveur revalider via ETag ou Last-Modified afin de toujours servir la bonne version.
no-cache autorise le stockage mais force une revalidation avant chaque usage : c’est l’idéal pour le HTML. no-store interdit purement et simplement la mise en cache, à réserver aux ressources réellement sensibles. Confondre les deux fait soit servir du contenu obsolète, soit gaspiller des requêtes réseau.
À faire
- configurer explicitement Cache-Control sur le serveur
- appliquer max-age=31536000 aux fichiers versionnés
- revalider le HTML avec ETag ou Last-Modified
- utiliser des URL cohérentes
À éviter
- omettre l’en-tête et laisser le navigateur deviner
- mettre en cache durablement des URL non versionnées
- servir le même contenu sur des URL différentes
- mélanger code volatil et code stable dans un même fichier
Points clés à retenir
- Définir explicitement Cache-Control plutôt que de laisser le navigateur décider.
- Réserver max-age=31536000 aux ressources dont le nom porte une empreinte.
- Revalider les URL non versionnées avec ETag ou Last-Modified.
- Préférer no-cache pour le HTML et no-store aux seules données sensibles.
- Séparer le code qui change souvent du code qui change rarement.
Le cache HTTP supprime des requêtes réseau entières pour un effort de configuration minime.
Quiz : testez vos connaissances
Quiz : testez vos connaissances
-
Que se passe-t-il si vous n'envoyez aucun en-tête Cache-Control ?
- Le cache est complètement désactivé
- Le navigateur devine un comportement selon le type de contenu, ce qui vous prive de contrôle
- Les ressources sont conservées pour toujours
Omettre l’en-tête ne désactive pas le cache. Le navigateur devine alors un comportement selon le type de contenu, et vous perdez la maîtrise de la mise en cache.
-
Quelle durée de cache convient à une URL versionnée comme style.x234dff.css ?
- Une mise en cache de longue durée avec max-age=31536000
- Une mise en cache courte de quelques minutes
- Aucune mise en cache, avec no-store
Pour une URL versionnée, le nom change dès que le contenu change, donc l’invalidation est propre. Vous pouvez fixer
max-age=31536000pour une mise en cache de longue durée. -
À quoi servent les en-têtes ETag et Last-Modified ?
- À compresser les réponses avant l'envoi
- À revalider une ressource expirée sans toujours la retélécharger
- À interdire toute mise en cache de la ressource
Quand une réponse mise en cache expire,
ETagetLast-Modifiedpermettent de revalider la ressource.ETag, fondé sur le contenu, est généralement plus précis queLast-Modified, fondé sur la date.
Besoin d'un accompagnement SEO ?
Des en-têtes de cache mal réglés génèrent des requêtes réseau évitables à chaque visite.