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-cacheBehandeln 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!

Antworten auf die Frage(4)

Ihre Antwort auf die Frage