--- 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-Control
Les 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éepublic
private
no-cache
no-store
max-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-revalidate
proxy-revalidate
must-revalidate
, mais force la valeur pour les caches partagés. Cette valeur est ignorée par les caches locaux.immutable
no-transform
Content-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-cached
504
. 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 |
La matrice de compatibilité de cette page est générée depuis le dépôt Git https://github.com/mdn/browser-compat-data. Si vous voulez contribuer en modifiant ces données, merci de faire une pull request sur Github.
{{Compat("http.headers.Cache-Control")}}
Cache-Control
for civilians