Cache HTTP et CDN : les directives Cache-Control à connaître
Mis à jour le
L'en-tête Cache-Control dit à deux publics — le navigateur et les caches partagés comme un CDN — combien de temps une réponse peut être réutilisée. Bien réglé, il supprime la majorité des requêtes ; mal réglé, il sert une version périmée, ou pire, la page privée d'un visiteur à un autre.
Les directives utiles
Sept directives couvrent la quasi-totalité des cas. Elles se combinent dans un même en-tête, séparées par des virgules.
- max-age : durée, en secondes, pendant laquelle la réponse est réutilisable sans interroger le serveur.
- s-maxage : même chose, mais pour les seuls caches partagés ; elle prend le pas sur max-age côté CDN.
- no-cache : la réponse peut être stockée, mais doit être revalidée auprès du serveur avant chaque réutilisation.
- no-store : rien n'est conservé, nulle part.
- private : seul le navigateur du visiteur peut stocker la réponse, jamais un cache partagé.
- immutable : le fichier ne changera pas pendant sa durée de validité, inutile de le revalider.
- stale-while-revalidate : la version expirée peut être servie pendant que la nouvelle est récupérée en arrière-plan.
Une stratégie par type de fichier
Les fichiers dont le nom contient une empreinte de leur contenu — scripts, styles, polices produits par le build — ne changent jamais : un an de validité et immutable. Une nouvelle version porte un nouveau nom.
Le HTML, lui, garde la même URL : on le fait revalider par le navigateur et on confie la durée de cache au CDN avec s-maxage. La revalidation coûte peu : grâce à l'ETag, le serveur répond 304 Not Modified, sans renvoyer le contenu, lorsque rien n'a changé.
L'erreur à ne jamais commettre
Une réponse qui dépend du visiteur — page de compte, panier, espace d'administration — ne doit jamais entrer dans un cache partagé. Marquée public par erreur, elle peut être servie telle quelle au visiteur suivant.
Tout ce qui dépend d'un cookie ou d'un jeton reçoit donc private ou no-store. En cas de doute, no-store : une requête de trop coûte moins cher qu'une fuite de données.
En bref
Quelle différence entre no-cache et no-store ?
no-cache autorise le stockage, mais impose de revalider la réponse auprès du serveur avant chaque réutilisation. no-store interdit tout stockage : la réponse est redemandée intégralement à chaque fois.
À quoi sert s-maxage ?
À fixer une durée de cache propre aux caches partagés, comme un CDN, différente de celle du navigateur. On peut ainsi mettre le HTML en cache sur le CDN tout en obligeant le navigateur à revalider.
Que signifie une réponse 304 Not Modified ?
Le navigateur a demandé si sa copie était encore valable et le serveur confirme que oui, sans renvoyer le contenu. La page est alors affichée depuis le cache local.