Unterschied zwischen No-Cache und Must-Revalidate
Aus dem RFC 2616
http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.1
kein Cache
Wenn die Direktive no-cache keinen Feldnamen angibt, darf ein Cache die Antwort NICHT verwenden, um eine nachfolgende Anforderung zu erfüllen, ohne dass eine erneute Überprüfung beim Ursprungsserver erfolgreich war. Auf diese Weise kann ein Ursprungsserver das Cachen auch durch Caches verhindern, die so konfiguriert wurden, dass veraltete Antworten auf Clientanforderungen zurückgegeben werden.
So werden die Agenten angewiesen, erneut zu validierenalles Antworten.
Verglichen mit
muss erneut validiert werden
Wenn die Direktive must-revalidate in einer Antwort vorhanden ist, die von einem Cache empfangen wird, DARF dieser Cache den Eintrag NICHT verwenden, nachdem er veraltet ist, um auf eine nachfolgende Anforderung zu antworten, ohne ihn zuvor mit dem Ursprungsserver erneut zu validieren
So werden die Agenten angewiesen, erneut zu validierenabgestanden Antworten.
Besonders in Bezug aufno-cache
Behandeln Benutzeragenten diese Anweisung auf diese Weise empirisch?
Was ist der Sinn vonno-cache
Wenn es gibtmust-revalidate
undmax-age
?
Siehe diesen Kommentar:
http://palpapers.plynt.com/issues/2008Jul/cache-control-attributes/
kein Cache
Obwohl diese Anweisung den Browser anweist, die Seite nicht im Cache zu speichern, gibt es einen subtilen Unterschied. Laut RFC teilt die Direktive "no-cache" dem Browser mit, dass er mit dem Server erneut validiert werden soll, bevor die Seite aus dem Cache ausgeliefert wird. Die erneute Validierung ist eine nette Technik, mit der die Anwendung die Bandbreite einspart. Wenn sich die vom Browser zwischengespeicherte Seite nicht geändert hat, signalisiert der Server dies nur dem Browser und die Seite wird aus dem Cache angezeigt. Daher speichert der Browser (zumindest theoretisch) die Seite in seinem Cache, zeigt sie jedoch erst nach einer erneuten Überprüfung auf dem Server an. In der Praxis haben IE und Firefox damit begonnen, die No-Cache-Direktive so zu behandeln, als würde sie den Browser anweisen, die Seite nicht einmal zwischenzuspeichern. Wir haben vor etwa einem Jahr damit begonnen, dieses Verhalten zu beobachten. Wir vermuten, dass diese Änderung durch die weitverbreitete (und inkorrekte) Verwendung dieser Direktive zur Verhinderung von Caching ausgelöst wurde.
Hat jemand etwas Offizielleres darüber?
Aktualisieren
Die Direktive "Muss erneut validieren" sollte von Servern nur dann verwendet werden, wenn die Nichtvalidierung einer Anforderung in der Darstellung zu einer fehlerhaften Operation führen kann, z. B. zu einer stillschweigend nicht ausgeführten Finanztransaktion.
Das habe ich mir bisher noch nie zu Herzen genommen. Der RFC sagt, dass die erneute Gültigkeitsprüfung nicht leichtfertig durchgeführt werden darf. Die Sache ist, dass Sie bei Webdiensten eine negative Sichtweise haben und das Schlimmste für Ihre unbekannten Client-Apps annehmen müssen. Jede veraltete Ressource kann ein Problem verursachen.
Und noch etwas, was ich gerade in Betracht gezogen habe: Ohne Last-Modified oder ETags kann der Browser nur die gesamte Ressource erneut abrufen. Mit ETags habe ich jedoch festgestellt, dass Chrome zumindest bei jeder Anfrage erneut zu validieren scheint. Dies führt dazu, dass beide Direktiven umstritten oder zumindest schlecht benannt sind, da sie nicht ordnungsgemäß erneut validiert werden können, es sei denn, die Anfrage enthält auch andere Header, die dann ohnehin "immer erneut validieren".
Ich möchte nur diesen letzten Punkt klarer machen. Durch einfaches Einstellenmust-revalidate
Ohne ETag oder Last-Modified kann der Agent den Inhalt jedoch nur erneut abrufen, da er nichts zum Vergleichen an den Server senden muss.
Meine empirischen Tests haben jedoch gezeigt, dass die Agenten, wenn ETag oder geänderte Headerdaten in den Antworten enthalten sind, unabhängig vom Vorhandensein der immer erneut validierenmust-revalidate
Header.
Also der Punkt vonmust-revalidate
besteht darin, einen "Bypass-Cache" zu erzwingen, wenn er veraltet ist. Dies kann nur geschehen, wenn Sie eine Lebensdauer / ein Alter festgelegt habenmust-revalidate
Wird eine Antwort ohne Alter oder andere Überschriften festgelegt, entspricht dies effektivno-cache
da wird die antwort sofort als abgestanden angesehen.
- Also werde ich endlich Gilis Antwort markieren!