Aus dem RFC 2616
http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.1
kein Cache
Wenn die Direktive ohne Cache keinen Feldnamen angibt, darf ein Cache die Antwort NICHT verwenden, um eine nachfolgende Anforderung ohne erfolgreiche erneute Validierung mit dem Ursprungsserver zu erfüllen. Auf diese Weise kann ein Ursprungsserver das Caching auch durch Caches verhindern, die so konfiguriert wurden, dass veraltete Antworten auf Clientanforderungen zurückgegeben werden.
Daher werden die Agenten angewiesen, alle Antworten erneut zu validieren .
Verglichen mit
muss-revalidieren
Wenn die Anweisung must-revalidate in einer von einem Cache empfangenen Antwort vorhanden ist, 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
Daher werden die Agenten angewiesen, veraltete Antworten erneut zu validieren .
Behandeln no-cache
Benutzeragenten diese Richtlinie insbesondere empirisch so empirisch?
Was bringt es, no-cache
wenn es must-revalidate
und gibt max-age
?
Siehe diesen Kommentar:
http://palpapers.plynt.com/issues/2008Jul/cache-control-attributes/
kein Cache
Obwohl diese Anweisung den Browser anweist, die Seite nicht zwischenzuspeichern, gibt es einen subtilen Unterschied. Die Direktive "kein Cache" weist den Browser laut RFC an, dass sie mit dem Server erneut validiert werden soll, bevor die Seite aus dem Cache bereitgestellt wird. Die Revalidierung ist eine nette Technik, mit der die Anwendung die Bandbreite erhalten kann. 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 erneuter Validierung mit dem Server an. In der Praxis haben IE und Firefox damit begonnen, die Direktive ohne Cache so zu behandeln, als ob sie den Browser anweist, die Seite nicht einmal zwischenzuspeichern. Wir haben vor etwa einem Jahr begonnen, dieses Verhalten zu beobachten.
Hat jemand etwas offizielleres dazu?
Aktualisieren
Die Richtlinie "Muss erneut validiert werden" sollte von Servern nur dann verwendet werden, wenn die Nichtvalidierung einer Anforderung in der Darstellung zu einem fehlerhaften Vorgang führen kann, z. B. zu einer stillschweigend nicht ausgeführten Finanztransaktion.
Das habe ich mir bis jetzt noch nie zu Herzen genommen. Der RFC sagt, dass Must-Revalidate nicht leichtfertig verwendet werden soll. Die Sache ist, dass Sie bei Webdiensten eine negative Meinung vertreten und das Schlimmste für Ihre unbekannten Client-Apps annehmen müssen. Jede veraltete Ressource kann ein Problem verursachen.
Und noch etwas, das ich gerade in Betracht gezogen habe: Ohne Last-Modified oder ETags kann der Browser nur die gesamte Ressource erneut abrufen. Bei ETags habe ich jedoch festgestellt, dass Chrome zumindest bei jeder Anfrage erneut validiert zu werden scheint. Dies führt dazu, dass diese beiden Direktiven strittig oder zumindest schlecht benannt sind, da sie nicht ordnungsgemäß erneut validiert werden können, es sei denn, die Anforderung enthält auch andere Header, die dann ohnehin "immer erneut validieren" verursachen.
Ich möchte nur diesen letzten Punkt klarer machen. Durch einfaches Einstellen, must-revalidate
aber ohne Einschließen eines ETag oder Last-Modified kann der Agent den Inhalt 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 Antworten enthalten sind, unabhängig vom Vorhandensein des must-revalidate
Headers immer wieder validieren .
Der Punkt von must-revalidate
ist also, einen "Bypass-Cache" zu erzwingen, wenn er veraltet ist. Dies kann nur passieren, wenn Sie eine Lebensdauer / ein Alter festgelegt haben. Wenn must-revalidate
also eine Antwort ohne Alter oder andere Header festgelegt ist, wird sie effektiv gleichbedeutend mit " no-cache
seitdem" Die Antwort wird sofort als veraltet betrachtet.
- Also werde ich endlich Gilis Antwort markieren!