Quelle est la différence entre les en-têtes Expires et Cache-Control?

Réponses:

130

Cache-Controla été introduit dans HTTP / 1.1 et offre plus d'options que Expires. Ils peuvent être utilisés pour accomplir la même chose mais la valeur de données pour Expiresest une date HTTP alors que Cache-Controlmax-age vous permet de spécifier une durée relative afin que vous puissiez spécifier "X heures après la demande de la page".

Le contrôle HTML Cache est une question très similaire et a un bon lien vers un tutoriel de mise en cache qui devrait répondre à la plupart de vos questions (par exemple, http://www.mnot.net/cache_docs/#EXPIRES ). Pour résumer, il Expiresest recommandé pour les ressources statiques comme les images et Cache-Controllorsque vous avez besoin de plus de contrôle sur la façon dont la mise en cache est effectuée.

Un Lee
la source
8
Il est intéressant de noter que le contrôle du cache est ce que tous les navigateurs utiliseront, mais il est utile de spécifier les deux en-têtes au cas où il y aurait d'anciens proxies sur le chemin.
Nacho Coloma le
3
Utilisez le service redbot.org (également de Mark Nottingham , qui a écrit l'article de mise en cache référencé dans la réponse ci-dessus) pour vérifier l'utilisation correcte des en-têtes de mise en cache.
daxim
35
De plus: "Lorsque Cache-Control et Expires sont présents, Cache-Control est prioritaire." - mnot.net/cache_docs/
KFunk
35

Si vous utilisez un CDN (Cloud Delivery Network), je vous recommande d'utiliser Cache-Control avec une durée maximale en secondes. Par exemple, Cache-Control: max-age = 604800. Cela évite les pics de requêtes vers votre serveur d'origine: Avec "Expire le mercredi 30 octobre 20xx 04:37:07 GMT", tous les navigateurs vous demanderont en même temps.

user3241258
la source
22
Apache (et probablement de nombreux serveurs) définissent généralement la date d'expiration en utilisant l'heure à laquelle le fichier a été demandé + le délai que vous spécifiez. Comme cette date utilise des secondes, votre scénario est très improbable et le comportement est le même que cache-control. Donc, je ne vois pas pourquoi il y aurait des pics de demandes lors de l'utilisationExpires:
hilnius
19

Selon cet article de Google Developers, HTTP Caching :

L'en-tête Cache-Control a été défini dans le cadre de la spécification HTTP / 1.1 et remplace les en-têtes précédents (par exemple Expires) utilisés pour définir les politiques de mise en cache des réponses. Tous les navigateurs modernes prennent en charge Cache-Control, c'est donc tout ce dont nous aurons besoin.

Paul
la source
Non seulement tous les navigateurs modernes le prennent en charge, mais ils devraient également, comme c'est le cas dans la spécification: "Si une réponse comprend à la fois un en-tête Expires et une directive max-age, la directive max-age remplace l'en-tête Expires, même si Expires l'en-tête est plus restrictif "[ w3.org/Protocols/rfc2616/rfc2616-sec14.html]
rosell.dk
8

Cache-Control a été défini dans HTTP / 1.1, indique à tous les mécanismes de mise en cache du serveur au client s'ils peuvent mettre en cache cet objet. Elle est mesurée en secondes: Cache-Control: max-age=3600.

Le Expireschamp d'en-tête donne la date / heure après laquelle la réponse est considérée comme périmée. La valeur est un horodatage Expire date HTTP: Expires: Tue, 18 Jul 2017 16:07:23 GMT.

Si une réponse comprend un Cache-Controlchamp avec la max-agedirective, un destinataire DOIT ignorer le Expireschamp.

nodejh
la source
4

Heroku devcenter a un excellent article sur ce sujet.

En citant,

Alors que l'en-tête Cache-Control active la mise en cache côté client et définit l'âge maximal d'une ressource, l'en-tête Expires est utilisé pour spécifier un moment précis dans lequel la ressource n'est plus valide.

Devi
la source
0

Sauf pour les options privées / publiques de CC, je ne vois aucune différence. Lorsque vous utilisez Expires comme "accès plus 1 an / mois / semaine / jour", cela fonctionne exactement de la même manière que CC.

Rob
la source
Voudriez-vous expliquer le vote défavorable? J'ai fait des tests approfondis dans Chrome, Safari et Firefox. Cache Control propose des options qui ne sont pas disponibles lors de l'utilisation d'expiration, mais à toutes fins pratiques, les deux fonctionnent exactement de la même manière.
Rob
-1

Si vous êtes toujours intéressé, je laisse cette recommandation directement des garçons de google. https://developers.google.com/speed/docs/insights/LeverageBrowserCaching Ils préfèrent Expire avant que Cache-Control

rayon
la source
Êtes-vous sûr qu'ils préfèrent Expires à Cache-Control? J'ai lu que le remplacement est l'inverse, du moins pour Firefox. developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Expires
Ecker00
Actuellement, cette page mentionne "Obsolète. Cette page a été écrite pour la version 4 de l'API PageSpeed ​​Insights, qui est obsolète et sera fermée en mai 2019. La version 5 est la dernière version et fournit à la fois des données réelles de l'expérience utilisateur Chrome. Rapport et données de laboratoire de Lighthouse. "
Jochem Schulenklopper