Générateur d'en-tête HTTP Cache-Control | Composer des directives avec détection de conflits
Construisez un en-tête de réponse Cache-Control à l'aide de boutons radio et de cases à cocher. Choisissez entre public et private, définissez max-age, s-maxage et stale-while-revalidate en secondes, activez des indicateurs tels que must-revalidate ou immutable, et l'outil produit une ligne unique comme Cache-Control: private, max-age=3600 accompagnée d'une explication en clair. Il signale aussi cinq combinaisons contradictoires courantes, comme associer no-store à max-age.
💡 À propos de cet outil
Écrire une ligne Cache-Control dans une configuration Nginx, Cloudflare ou un compartiment de stockage paraît simple, jusqu'à la question essentielle : cette ligne fait-elle vraiment ce que je crois ? Les noms des directives se retiennent vite, mais c'est dans leurs interactions que se cachent les bogues. no-cache et no-store se ressemblent et se comportent pourtant à l'inverse ; savoir laquelle l'emporte lorsqu'on définit aussi max-age impose souvent un nouveau passage par la documentation.
Cet outil assemble l'en-tête et, surtout, met en évidence les combinaisons qui s'annulent. Choisissez no-store puis saisissez une valeur max-age : il indique que no-store l'emporte et que rien n'est stocké. Cochez immutable avec un max-age à zéro : il avertit que l'indicateur n'a aucun effet. Considérez-le comme un brouillon : ajustez les directives, vérifiez le résultat, puis reportez un en-tête fiable dans votre configuration réelle.
🧐 Questions fréquentes
Q. Quelle est la différence entre no-cache et no-store ? no-cache stocke bien la réponse, mais doit la revalider auprès de l'origine avant toute réutilisation. no-store interdit totalement son stockage. Utilisez no-store pour des données sensibles qui ne doivent jamais être écrites dans un cache, et no-cache lorsque vous voulez garantir la fraîcheur tout en autorisant une réutilisation conditionnelle.
Q. Quand préférer s-maxage à max-age ? max-age s'applique à tous les caches, y compris le navigateur. s-maxage s'applique uniquement aux caches partagés comme les CDN et proxys, où il l'emporte sur max-age. Un schéma fréquent associe un max-age court pour les navigateurs et un s-maxage plus long pour que le CDN absorbe davantage de trafic.
Q. Qu'advient-il de mon CDN si je choisis private ? private signifie que la réponse ne peut être conservée que dans un cache privé comme le navigateur ; les CDN et proxys n'en gardent pas de copie. C'est adapté aux pages qui varient selon l'utilisateur. Choisissez public lorsque vous souhaitez que les caches partagés stockent la réponse.
Q. Existe-t-il une limite maximale en secondes ? max-age, s-maxage, stale-while-revalidate et stale-if-error acceptent des entiers de 0 à 31536000 secondes (un an). Toute valeur supérieure est ramenée à 31536000.
Q. À quoi sert immutable ? immutable indique au navigateur que le fichier ne changera pas pendant sa période de fraîcheur, ce qui lui permet d'éviter la requête conditionnelle de revalidation au rechargement. Il fonctionne bien avec des noms de fichiers contenant un hachage et un max-age long, où l'URL change dès que le contenu change.
📚 Bonnes pratiques de mise en cache
Une distinction utile oppose la fraîcheur à la validation. La fraîcheur, fixée par max-age et s-maxage, détermine combien de temps une réponse peut être servie sans contacter l'origine. La validation, déclenchée par no-cache ou must-revalidate, permet de réutiliser une réponse expirée à condition que l'origine confirme qu'elle est toujours valable, généralement via un ETag. Bien séparer ces deux notions évite la plupart des configurations contradictoires.
L'en-tête Cache-Control a été introduit avec HTTP/1.1 et il est aujourd'hui décrit par le RFC 9111. Auparavant, HTTP/1.0 reposait sur l'en-tête Expires et une date absolue, sensible aux écarts d'horloge entre serveur et client. Le passage à des durées relatives en secondes avec max-age a corrigé ce défaut et constitue le socle des stratégies de mise en cache actuelles.