Die Überschrift Cache-Control: max-age=0
impliziert, dass der Inhalt als veraltet betrachtet wird (und sofort neu geholt werden muss), was im Grunde dasselbe ist wie Cache-Control: no-cache
.
Antworten
Zu viele Anzeigen?Ich hatte dieselbe Frage und habe bei meiner Suche einige Informationen gefunden (Ihre Frage war eines der Ergebnisse). Hier ist, was ich herausgefunden habe...
Das Thema hat zwei Seiten Cache-Control
Kopfzeile. Auf der einen Seite kann er vom Webserver (auch "Ursprungsserver" genannt) gesendet werden. Auf der anderen Seite kann er vom Browser (auch "User Agent" genannt) gesendet werden.
Wenn vom Ursprungsserver gesendet
Ich glaube max-age=0
sagt den Caches (und User-Agents) einfach, dass die Antwort von Anfang an veraltet ist und sie daher SHOULD die Antwort erneut validieren (z. B. mit dem If-Not-Modified
Header), bevor eine zwischengespeicherte Kopie verwendet wird, während, no-cache
sagt ihnen, dass sie MUSS vor der Verwendung einer zwischengespeicherten Kopie erneut validieren. Von 14.9.1 Was ist cachefähig? :
no-cache
...ein Cache MUSS die Antwort NICHT verwenden zur Befriedigung einer nachfolgenden Anfrage ohne erfolgreiche Revalidierung mit dem dem Ursprungsserver. Dies erlaubt einem Ursprungsserver das Caching auch durch von Caches zu verhindern, die so konfiguriert sind, dass sie veraltete Antworten auf Client Anfragen zurückgeben.
Mit anderen Worten, Caches können sich manchmal dafür entscheiden, eine veraltete Antwort zu verwenden (obwohl ich glaube, dass sie dann eine Warning
Kopfzeile), sondern no-cache
sagt, dass sie eine veraltete Antwort nicht verwenden dürfen, egal was passiert. Vielleicht sollten Sie die SHOULD -Revalidate-Verhalten, wenn Baseball-Statistiken in einer Seite generiert werden, aber Sie würden die MUSS -Verhalten zu überprüfen, wenn Sie die Antwort auf einen E-Commerce-Kauf erstellt haben.
Obwohl Sie mit Ihrem Kommentar Recht haben, wenn Sie sagen no-cache
nicht dazu gedacht ist, die Speicherung zu verhindern, könnte es tatsächlich ein weiterer Unterschied sein, wenn man no-cache
. Ich bin auf eine Seite gestoßen, Cache-Kontrollrichtlinien entmystifiziert die besagt (ich kann nicht für die Richtigkeit bürgen):
In der Praxis haben IE und Firefox begonnen, die no-cache Anweisung so zu behandeln, als würde sie den Browser anweisen Browser anweist, die Seite gar nicht zu cachen. Wir beobachteten dieses Verhalten vor etwa einem Jahr. Wir vermuten, dass dass diese Änderung durch die weit verbreitete (und falsche) Verwendung dieser Direktive zur Verhinderung von Caching.
...
Beachten Sie, dass in letzter Zeit "cache-control: no-cache" sich auch wie die Direktive wie die Richtlinie "no-store".
Nebenbei bemerkt, scheint es mir, dass Cache-Control: max-age=0, must-revalidate
sollte im Grunde das Gleiche bedeuten wie Cache-Control: no-cache
. Vielleicht ist das also eine Möglichkeit, die MUSS -Validierung des Verhaltens von no-cache
bei gleichzeitiger Vermeidung der offensichtlichen Migration von no-cache
das Gleiche zu tun wie no-store
(d. h. keinerlei Zwischenspeicherung)?
Wenn vom Benutzeragenten gesendet
Ich glaube shahkalpeshs Antwort gilt für die User-Agent-Seite. Sie können sich auch ansehen 13.2.6 Disambiguierung mehrerer Antworten .
Wenn ein User-Agent eine Anfrage sendet mit Cache-Control: max-age=0
(auch bekannt als "Ende-zu-Ende-Revalidierung"), dann wird jeder Cache entlang des Weges seinen Cache-Eintrag revalidieren (z. B. mit dem If-Not-Modified
Header) bis hin zum Ursprungsserver. Wenn die Antwort dann 304 (Not Modified) lautet, kann die zwischengespeicherte Entität verwendet werden.
Andererseits ist das Senden einer Anfrage mit Cache-Control: no-cache
(auch bekannt als "end-to-end reload") nicht neu validiert und der Server MUSS NICHT bei der Beantwortung eine zwischengespeicherte Kopie verwenden.
max-age=0
Dies ist gleichbedeutend mit einem Klick auf Auffrischen Das bedeutet, dass Sie mir die neueste Kopie geben sollen, es sei denn, ich habe bereits die neueste Kopie.
no-cache
Dies hält Schicht während Sie auf Aktualisieren klicken, was bedeutet, dass Sie einfach alles neu machen, egal was passiert.
Die Frage ist zwar schon alt, aber falls noch jemand bei einer Suche darauf stößt, so wie ich es getan habe, scheint der IE9 dies zu nutzen, um das Verhalten von Ressourcen bei Verwendung der Schaltflächen "Zurück" und "Vor" zu konfigurieren. Wenn max-age=0 verwendet wird, verwendet der Browser die letzte Version, wenn eine Ressource durch Drücken der Taste "Zurück/Vorwärts" angezeigt wird. Wenn no-cache verwendet wird, wird die Ressource erneut abgerufen.
Weitere Einzelheiten zum IE9-Caching finden Sie hier msdn caching blog post .
Meine jüngsten Tests mit IE8 und Firefox 3.5 haben ergeben, dass beide RFC-konform sind. Sie unterscheiden sich jedoch in ihrer "Freundlichkeit" gegenüber dem Ursprungsserver. Der IE8 behandelt no-cache
Antworten mit der gleichen Semantik wie max-age=0,must-revalidate
. Firefox 3.5 scheint jedoch die no-cache
als gleichwertig zu no-store
was sich negativ auf die Leistung und die Bandbreitennutzung auswirkt.
Squid Cache scheint standardmäßig nie etwas mit einer no-cache
Kopfzeile, genau wie Firefox.
Mein Rat wäre, die public,max-age=0
für nicht sensible Ressourcen, die bei jeder Anfrage auf Aktualität geprüft werden sollen, aber dennoch die Leistungs- und Bandbreitenvorteile des Caching nutzen können. Für benutzerspezifische Elemente mit den gleichen Überlegungen verwenden Sie private,max-age=0
.
Ich würde die Verwendung von no-cache
vollständig zu entfernen, da sie von einigen Browsern und gängigen Caches zum funktionalen Äquivalent von no-store
.
Außerdem sollten Sie nicht Akamai und Limelight nacheifern. Sie betreiben zwar in erster Linie riesige Caching-Arrays und sollten Experten sein, aber sie haben ein ureigenes Interesse daran, dass mehr Daten aus ihren Netzen heruntergeladen werden. Auch Google ist möglicherweise keine gute Wahl für eine Nachahmung. Sie scheinen zu verwenden max-age=0
o no-cache
nach dem Zufallsprinzip je nach Ressource.
max-age
When an intermediate cache is forced, by means of a max-age=0 directive, to revalidate
its own cache entry, and the client has supplied its own validator in the request, the
supplied validator might differ from the validator currently stored with the cache entry.
In this case, the cache MAY use either validator in making its own request without
affecting semantic transparency.
However, the choice of validator might affect performance. The best approach is for the
intermediate cache to use its own validator when making its request. If the server replies
with 304 (Not Modified), then the cache can return its now validated copy to the client
with a 200 (OK) response. If the server replies with a new entity and cache validator,
however, the intermediate cache can compare the returned validator with the one provided in
the client's request, using the strong comparison function. If the client's validator is
equal to the origin server's, then the intermediate cache simply returns 304 (Not
Modified). Otherwise, it returns the new entity with a 200 (OK) response.
**If a request includes the no-cache directive, it SHOULD NOT include min-fresh,
max-stale, or max-age.**
Höflichkeit: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.4
Akzeptieren Sie dies nicht als Antwort - ich muss es lesen, um die wahre Verwendung zu verstehen :)
- See previous answers
- Weitere Antworten anzeigen