Was ist der Unterschied zwischen Expires- und Cache-Control-Headern?


Antworten:


130

Cache-Controlwurde in HTTP / 1.1 eingeführt und bietet mehr Optionen als Expires. Sie können verwendet werden, um dasselbe zu erreichen, aber der Datenwert für Expiresist ein HTTP-Datum, während Sie bei Cache-Controlmax-age eine relative Zeitspanne angeben können, sodass Sie "X Stunden nach Anforderung der Seite" angeben können.

Das HTML-Cache-Steuerelement ist eine sehr ähnliche Frage und enthält einen guten Link zu einem Caching-Tutorial, das die meisten Ihrer Fragen beantworten sollte (z . B. http://www.mnot.net/cache_docs/#EXPIRES ). Zusammenfassend Expireswird dies jedoch für statische Ressourcen wie Bilder empfohlen und Cache-Controlwenn Sie mehr Kontrolle darüber benötigen, wie das Caching durchgeführt wird.


8
Es ist erwähnenswert, dass die Cache-Steuerung von allen Browsern verwendet wird. Es ist jedoch nützlich, beide Header anzugeben, nur für den Fall, dass alte Proxys im Weg sind.
Nacho Coloma

3
Verwenden Sie den Dienst redbot.org (ebenfalls von Mark Nottingham , der den in der obigen Antwort genannten Caching-Artikel geschrieben hat), um die korrekte Verwendung von Caching-Headern zu überprüfen.
Daxim

35
Außerdem: "Wenn sowohl Cache-Control als auch Expires vorhanden sind, hat Cache-Control Vorrang." - mnot.net/cache_docs/
KFunk

35

Wenn Sie ein CDN (Cloud Delivery Network) verwenden, empfehle ich die Verwendung von Cache-Control mit einer maximalen Alterszeit in Sekunden. Zum Beispiel Cache-Control: max-age = 604800. Dies verhindert Anforderungsspitzen an Ihrem Ursprungsserver: Mit "Läuft am Mittwoch, 30. Oktober 20xx 04:37:07 GMT ab" werden Sie von allen Browsern gleichzeitig angefordert.


22
Apache (und wahrscheinlich viele Server) legen das Ablaufdatum normalerweise anhand des Zeitpunkts fest, zu dem die Datei angefordert wurde, sowie anhand des von Ihnen angegebenen Zeitlimits. Da dieses Datum Sekunden verwendet, ist Ihr Szenario sehr unwahrscheinlich und das Verhalten ist das gleiche wie cache-control. Ich verstehe also nicht, warum es bei Verwendung Anfragen geben würdeExpires:
hilnius

19

Laut diesem Artikel von Google Developers wird HTTP-Caching :

Der Cache-Control-Header wurde als Teil der HTTP / 1.1-Spezifikation definiert und ersetzt frühere Header (z. B. Expires), die zum Definieren von Richtlinien für das Zwischenspeichern von Antworten verwendet wurden. Alle modernen Browser unterstützen Cache-Control, daher ist dies alles, was wir brauchen werden.


Dies wird nicht nur von allen modernen Browsern unterstützt, sondern auch, wie in der Spezifikation angegeben: "Wenn eine Antwort sowohl einen Expires-Header als auch eine Max-Age-Direktive enthält, überschreibt die Max-Age-Direktive den Expires-Header, auch wenn der Expires-Header." Header ist restriktiver "[ w3.org/Protocols/rfc2616/rfc2616-sec14.html]
rosell.dk

8

Die Cache-Steuerung wurde in HTTP / 1.1 definiert und teilt allen Caching-Mechanismen vom Server zum Client mit, ob sie dieses Objekt zwischenspeichern dürfen. Es wird in Sekunden gemessen : Cache-Control: max-age=3600.

Das ExpiresHeader-Feld gibt das Datum / die Uhrzeit an, nach der die Antwort als veraltet gilt. Der Expires-Wert ist ein HTTP-Datumszeitstempel : Expires: Tue, 18 Jul 2017 16:07:23 GMT.

Wenn eine Antwort ein Cache-ControlFeld mit der max-ageDirektive enthält, MUSS ein Empfänger das ExpiresFeld ignorieren .


4

Heroku Devcenter hat einen ausgezeichneten Artikel zu diesem Thema.

Zitiert daraus,

Während der Cache-Control-Header das clientseitige Caching aktiviert und das maximale Alter einer Ressource festlegt, wird im Expires-Header ein bestimmter Zeitpunkt angegeben, zu dem die Ressource nicht mehr gültig ist.


0

Mit Ausnahme der privaten / öffentlichen Optionen von CC sehe ich keinen Unterschied. Bei Verwendung von Expires wie "Zugriff plus 1 Jahr / Monat / Woche / Tag" funktioniert dies genauso wie bei CC.


Möchten Sie die Ablehnung erklären? Ich habe einige umfangreiche Tests in Chrome, Safari und Firefox durchgeführt. Cache Control verfügt über einige Optionen, die bei Verwendung von expires nicht verfügbar sind, aber für alle praktischen Zwecke funktionieren beide genau gleich.
Rob

-1

Wenn Sie immer noch interessiert sind, lasse ich diese Empfehlung direkt von Googles Jungs. https://developers.google.com/speed/docs/insights/LeverageBrowserCaching Sie bevorzugen Expires before als Cache-Control


Sind Sie sicher, dass sie Expires der Cache-Kontrolle vorziehen? Ich habe gelesen, dass die Außerkraftsetzung umgekehrt ist, zumindest für Firefox. developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Expires
Ecker00

Derzeit wird auf dieser Seite "Veraltet" erwähnt. Diese Seite wurde für Version 4 der PageSpeed ​​Insights-API geschrieben, die veraltet ist und im Mai 2019 heruntergefahren wird. Version 5 ist die neueste Version und enthält sowohl reale Daten aus der Chrome User Experience Bericht und Labordaten vom Leuchtturm. "
Jochem Schulenklopper
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.