--- title: Cache-Control slug: Web/HTTP/Headers/Cache-Control tags: - Cache-Control - General Header - HTTP - HTTP Headers - Reference translation_of: Web/HTTP/Headers/Cache-Control ---
{{HTTPSidebar}}
L'en-tête HTTP Cache-Control contient des directives (ou instructions) pour la mise en cache tant dans les requêtes que dans les réponses. Une directive donnée dans une requête ne signifie pas que la même directive doit se trouver dans la réponse.
| Type d'en-tête | {{Glossary("General header")}} |
|---|---|
| {{Glossary("Forbidden header name")}} | non |
| {{Glossary("CORS-safelisted response header")}} | oui |
Pour être valables, les directives de mise en cache doivent respecter les règles suivante :
Les règles standard Cache-Control suivantes peuvent être utilisées par un client HTTP dans une requête :
Cache-Control: max-age=<seconds> Cache-Control: max-stale[=<seconds>] Cache-Control: min-fresh=<seconds> Cache-Control: no-cache Cache-Control: no-store Cache-Control: no-transform Cache-Control: only-if-cached
Les règles standard Cache-Control suivantes peuvent être utilisées par un serveur HTTP dans une réponse :
Cache-Control: must-revalidate Cache-Control: no-cache Cache-Control: no-store Cache-Control: no-transform Cache-Control: public Cache-Control: private Cache-Control: proxy-revalidate Cache-Control: max-age=<seconds> Cache-Control: s-maxage=<seconds>
Cache-ControlLes directives Extension Cache-Control ne font pas partie du document sur les normes de base de la mise en cache HTTP. Vérifiez leur prise en charge dans la table de compatibilité ; les agents-utilisateurs qui ne les reconnaissent pas doivent les ignorer.
Cache-Control: immutable Cache-Control: stale-while-revalidate=<seconds> Cache-Control: stale-if-error=<seconds>
Une réponse est normalement mise en cache par le navigateur si
301, 302, 307, 308, or 410 etCache-Control n'a pas de no-store, ou s'il s'agit d'un mandataire, il n'a pas d'adresse privée etAuthorization n'est pas fixéepublicprivateno-cacheno-storemax-age=0 est déjà implicite. La définition de la directive must-revalidate n'a pas de sens car pour passer la revalidation, vous devez stocker la réponse dans un cache, ce que n'empêche no-store.pre-check=0,post-check=0 Si vous le voyez en ligne car il est entièrement ignoré, ce que confirme le tweet du développeur Edge.no-store
no-cache,no-store,must-revalidate,pre-check=0,post-check=0
max-age=<secondes>expires, la durée indiquée dans cette directive commence à la date de la requête.s-maxage=<secondes>max-age ou Expires pour les caches partagés (comme les proxies). Il est donc ignoré par les caches privés (dont les navigateurs).max-stale[=<secondes>]min-fresh=<secondes>stale-while-revalidate=<secondes> {{experimental_inline}}stale-if-error=<secondes> {{experimental_inline}}must-revalidateproxy-revalidatemust-revalidate, mais force la valeur pour les caches partagés. Cette valeur est ignorée par les caches locaux.immutableno-transformContent-Encoding, Content-Range et Content-Type ne devraient jamais être modifiés par un proxy (serveur mandataire). Un proxy non-transparent pourrait, en l'absence de cet en-tête, convertir ou compresser (avec pertes) des images pour réduire la place occupée en cache ou diminuer le volume de données à transférer sur un lien lent.only-if-cached504. Les en-têtes conditionnels tels que If-None-Match ne doivent pas être définis. Il n'y a aucun effet si only-if-cached est défini par un serveur dans le cadre d'une réponse.Pour désactiver la mise en cache, vous pouvez envoyer l'en-tête de réponse suivant. En outre, voir aussi les en-têtes Expires et Pragma.
Cache-Control: no-store
Cache-Control: private,no-cache,no-store,max-age=0,must-revalidate,pre-check=0,post-check=0
Pour les fichiers de l'application qui ne seront pas modifiés, vous pouvez généralement ajouter une mise en cache agressive en envoyant l'en-tête de réponse ci-dessous. Cela inclut les fichiers statiques qui sont servis par l'application comme les images, les fichiers CSS et les fichiers JavaScript, par exemple. En outre, voir l'en-tête Expires.
Cache-Control: public, max-age=604800, immutable
Le fait de spécifier no-cache ou max-age=0 indique que les clients peuvent mettre une ressource en cache et doivent la revalider à chaque fois avant de l'utiliser. Cela signifie que la requête HTTP se produit à chaque fois, mais qu'elle peut sauter le téléchargement du corps HTTP si le contenu est valide.
Cache-Control: no-cache Cache-Control: no-cache, max-age=0 Cache-Control: no-cache, max-age=0, stale-while-revalidate=300
| Specification | Status | Comment |
|---|---|---|
| {{RFC(8246, "HTTP Immutable Responses")}} | IETF RFC | |
| {{RFC(7234, "Hypertext Transfer Protocol (HTTP/1.1): Caching")}} | IETF RFC | |
| {{RFC(5861, "HTTP Cache-Control Extensions for Stale Content")}} | IETF RFC | Initial definition |
{{Compat("http.headers.Cache-Control")}}
Cache-Control for civilians