Aussi disponible en : English · Español · Português · العربية
En-tête Cache-Control : toutes les directives et ce que voit un CDN
Choisissez des directives et obtenez un en-tête, ou collez-en un et découvrez ce qu'il dit réellement à un navigateur et à un cache partagé.
Qu'est-ce que l'en-tête Cache-Control ?
Cache-Control est la façon dont un serveur indique aux caches ce qu'ils peuvent faire d'une réponse, et dont un client leur indique ce qu'il acceptera. La RFC 9111 en définit dix-sept directives : sept qui vont sur une requête et dix qui vont sur une réponse. Quatre noms figurent des deux côtés — max-age, no-cache, no-store et no-transform — et signifient des choses différentes selon le sens dans lequel le message circule.
La distinction la plus importante ne figure pas dans la liste des directives. La RFC 9111 sépare le cache partagé, c'est-à-dire un CDN ou un proxy inverse ou tout ce qui sert plus d'une personne, du cache privé, celui du navigateur. Sept des dix-sept directives nomment un cache partagé dans leur définition et deux seulement nomment les deux. L'IANA tient un registre de ces directives et n'en consigne rien : des noms, des références, et rien sur le comportement — cette page lit donc la prose de la spécification.
C'est pourquoi un en-tête peut sembler complet et ne rien dire à votre CDN. max-age s'adresse à n'importe quel cache ; s-maxage, public, private et proxy-revalidate sont celles qui visent expressément le cache partagé.
Comment l'utiliser
- Choisissez le côté. Réponse est le cas habituel : ce que votre serveur envoie. Requête est ce qu'envoie un navigateur ou un client, avec un autre jeu de sept directives.
- Cliquez des directives ou saisissez l'en-tête directement. Les boutons et le champ de texte ne font qu'un : activer une directive réécrit le champ, et modifier le champ met à jour les boutons.
- Lisez le verdict, pas seulement la chaîne. On vous dit si quelque chose atteint un cache partagé, ce qui est réellement interdit, et quelles directives posent problème — avec la formulation même de la spécification en dessous.
no-cache ne veut pas dire « ne pas mettre en cache »
C'est le contresens le plus lourd de conséquences de tout l'en-tête, et la RFC 9111 tranche sans détour. La forme de réponse de no-cache signifie que la réponse « NE DOIT PAS être utilisée pour satisfaire une autre requête sans être transmise pour validation ». La réponse est bel et bien stockée. Elle ne peut simplement pas être resservie sans consulter votre serveur au préalable, ce qui est en général exactement ce que l'on veut et pas du tout ce que l'on croit demander.
La directive qui interdit de stocker, c'est no-store : un cache « NE DOIT PAS stocker la moindre partie » de la requête ni de la réponse. Si vous avez des données sensibles et que vous avez pris no-cache, vous avez pris la mauvaise. Cette page rapporte les deux comme des constats distincts plutôt que de les confondre, et le signale sur-le-champ lorsqu'un en-tête porte no-cache sans no-store.
Une subtilité voisine mérite d'être connue : no-cache peut prendre un nom d'en-tête comme valeur, et les deux formes diffèrent. Sans valeur, elle porte sur toute la réponse. Avec un nom d'en-tête, elle ne restreint que celui-là, le reste de la réponse restant réutilisable. Sept directives prennent une valeur et quatre seulement l'exigent : no-cache, private et max-stale ont chacune une forme parfaitement valide sans rien derrière.
Ce que cette page ne vous dira pas
Elle ne vous dira pas ce que fait votre CDN en particulier. Les directives sont ce que la spécification déclare qu'un cache conforme doit et peut faire ; chaque CDN commercial superpose sa propre configuration, ses directives maison et ses réglages par défaut, et plusieurs honorent des extensions non normalisées que cette page ignore. Une directive signalée comme atteignant un cache partagé vous dit que la norme s'adresse à lui, pas que votre fournisseur l'implémente comme vous l'imaginez.
Elle ne couvre par ailleurs que Cache-Control. La fraîcheur se décide aussi ailleurs — Expires, Age, ETag et Last-Modified y participent tous — et une réponse dépourvue de Cache-Control peut encore être mise en cache par heuristique. Vérifier un en-tête est une étape nécessaire, pas un audit complet.
Enfin, elle rapporte les mots de la spécification, non des conseils. Il n'y a pas d'en-tête recommandé ici, car le bon dépend du caractère personnalisé de la ressource, du fait que son URL soit versionnée, et de la vitesse à laquelle un changement doit atteindre les gens. Ce que la page peut faire, c'est vérifier que l'en-tête choisi signifie bien ce que vous croyez.
Pourquoi est-ce gratuit ?
La table des directives tient en quelques kilo-octets qui voyagent avec la page, et l'analyse a lieu dans votre propre navigateur. Rien de ce que vous tapez n'est envoyé, rien n'est journalisé, et il n'y a aucun compte à créer.
Sans inscription, sans limite, et sans filigrane sur ce que vous copiez.