Ich soll verhindern, dass Benutzerinformationen verloren gehen. Nur "kein Cache" als Antwort reicht nicht aus. "no-store" ist ebenfalls erforderlich.
Cache-Control: no-cache, no-store
Nachdem ich diese Spezifikation http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html gelesen habe , bin ich mir immer noch nicht ganz sicher, warum.
Mein derzeitiges Verständnis ist, dass es nur für Zwischen-Cache-Server ist. Selbst wenn "kein Cache" antwortet, kann der Zwischen-Cache-Server den Inhalt dennoch in einem nichtflüchtigen Speicher speichern. Der Zwischen-Cache-Server entscheidet, ob der gespeicherte Inhalt für die folgende Anforderung verwendet wird. Wenn jedoch "no-store" in der Antwort enthalten ist, soll der Zwischen-Cache-Server den Inhalt nicht speichern. Es ist also sicherer.
Gibt es einen anderen Grund, warum wir sowohl "No-Cache" als auch "No-Store" benötigen?
no-cache
bedeutet nicht, was Sie denken, dass es tut. Eigentlich bedeutet es "bitte revalidieren".Antworten:
Ich muss klarstellen, dass
no-cache
das nicht bedeutet , nicht zwischenzuspeichern . Tatsächlich bedeutet dies "erneut mit Server validieren", bevor bei jeder Anforderung eine zwischengespeicherte Antwort verwendet wird.must-revalidate
Auf der anderen Seite muss nur erneut validiert werden, wenn die Ressource als veraltet betrachtet wird.Wenn der Server angibt, dass die Ressource noch gültig ist, kann der Cache mit seiner Darstellung antworten, wodurch die Notwendigkeit verringert wird, dass der Server die gesamte Ressource erneut sendet.
no-store
ist effektiv die vollständige Nicht-Cache- Direktive und soll verhindern, dass die Darstellung in irgendeiner Form von Cache gespeichert wird.Ich sage was auch immer, aber beachte dies in der RFC 2616 HTTP-Spezifikation:
Dies wird jedoch in der neueren RFC 7234-HTTP-Spezifikation weggelassen, um möglicherweise zu versuchen,
no-store
stärker zu werden, siehe:http://tools.ietf.org/html/rfc7234#section-5.2.1.5
quelle
Cache-Control: no-store
genugno-store
und beschreibt,no-cache
als ob es überhaupt kein Caching gibt ... Ich bin verwirrt!Unter bestimmten Umständen speichert IE6 Dateien auch dann zwischen, wenn sie
Cache-Control: no-cache
sich in den Antwortheadern befinden.Die W3C-Staaten von
no-cache
:Wenn Sie in meiner Anwendung eine Seite mit dem
no-cache
Header besucht, sich dann abgemeldet und dann in Ihrem Browser zurückgeschlagen haben, hat IE6 die Seite weiterhin aus dem Cache abgerufen (ohne eine neue / validierende Anforderung an den Server). Durch Hinzufügen desno-store
Headers wurde dies gestoppt. Aber wenn Sie das W3C beim Wort nehmen, gibt es tatsächlich keine Möglichkeit, dieses Verhalten zu kontrollieren:Allgemeine Unterschiede zwischen dem Browserverlauf und dem normalen HTTP-Caching werden in einem bestimmten Unterabschnitt der Spezifikation beschrieben .
quelle
no-store
werden. Andernfalls zeigt Chrome zwischengespeicherte / gepufferte Daten an, wenn Sie die Schaltfläche "Zurück" verwenden.no-cache
Header zwischenzuspeichern. Das unmittelbar unten stehende W3C-Zitat macht deutlich, dass dies nicht der Fall ist. Derno-cache
Header bedeutet lediglich, dass die Antwort erneut validiert werden muss, bevor sie für nachfolgende Anforderungen wiederverwendet wird.Aus der HTTP 1.1-Spezifikation :
quelle
no-cache
undmax-age=0
sagen, dass der Gegenstand als abgestanden anzusehen ist. Dies bedeutet, dass es vor dem Servieren erneut validiert werden muss. Dies bedeutet, dass ein Cache die Datei speichern und dann eine bedingte Anforderung ausführen kann, auf die der Server antworten kann304 NOT MODIFIED
. Dies ist offensichtlich ein großer Vorteil, da der Hauptteil der Antwort nicht generiert und gesendet werden muss. Also nutzen Sie diese viele ( die meisten?) Caches wird speichernno-cache
Antworten.Wenn Sie jegliches Caching verhindern möchten (z. B. ein erneutes Laden erzwingen, wenn Sie die Zurück-Taste verwenden), benötigen Sie:
Kein Cache für IE
No-Store für Firefox
Hier gibt es meine Informationen dazu:
http://blog.httpwatch.com/2008/10/15/two-important-differences-between-firefox-and-ie-caching/
quelle
no-store
sollte in normalen Situationen nicht erforderlich sein und kann sowohl die Geschwindigkeit als auch die Benutzerfreundlichkeit beeinträchtigen. Es ist für die Verwendung vorgesehen, bei der die HTTP-Antwort Informationen enthält, die so vertraulich sind, dass sie niemals in einen Festplatten-Cache geschrieben werden sollten, unabhängig von den negativen Auswirkungen, die für den Benutzer entstehen.Wie es funktioniert:
Selbst wenn ein Benutzeragent wie ein Browser feststellt, dass eine Antwort nicht zwischengespeichert werden soll, wird sie normalerweise aus internen Gründen des Benutzeragenten im Festplatten-Cache gespeichert. Diese Version kann für Funktionen wie "Quelltext anzeigen", "Zurück", "Seiteninformationen" usw. verwendet werden, bei denen der Benutzer die Seite nicht unbedingt erneut angefordert hat, der Browser sie jedoch nicht als neue Seitenansicht betrachtet und es wäre sinnvoll, dieselbe Version bereitzustellen, die der Benutzer gerade anzeigt.
Durch
no-store
die Verwendung wird verhindert, dass diese Antwort gespeichert wird. Dies kann sich jedoch auf die Fähigkeit des Browsers auswirken, "Quelltext anzeigen", "Zurück", "Seiteninformationen" usw. anzugeben, ohne eine neue, separate Anforderung für den Server zu stellen, was unerwünscht ist. Mit anderen Worten, der Benutzer versucht möglicherweise, die Quelle anzuzeigen. Wenn der Browser sie nicht im Speicher aufbewahrt, wird ihm entweder mitgeteilt, dass dies nicht möglich ist, oder es wird eine neue Anforderung an den Server gesendet. Daherno-store
sollte nur verwendet werden, wenn die eingeschränkte Benutzererfahrung dieser Funktionen, die nicht ordnungsgemäß oder schnell funktioniert, durch die Wichtigkeit aufgewogen wird, sicherzustellen, dass Inhalte nicht im Cache gespeichert werden.Das ist falsch. Zwischen-Cache-Server, die mit HTTP 1.1 kompatibel sind, befolgen die Anweisungen
no-cache
undmust-revalidate
und stellen sicher, dass der Inhalt nicht zwischengespeichert wird. Durch die Verwendung dieser Anweisungen wird sichergestellt, dass die Antwort nicht von einem Zwischencache zwischengespeichert wird und dass alle nachfolgenden Anforderungen an den Ursprungsserver zurückgesendet werden.Wenn der Zwischen-Cache-Server HTTP 1.1 nicht unterstützt, müssen Sie
Pragma: no-cache
das Beste verwenden und darauf hoffen. Beachten Sie, dass HTTP 1.1no-store
ohnehin irrelevant ist , wenn es nicht unterstützt wird.quelle
no-cache
die starre Aktualität erhalten bleibt, ohne alle Vorteile des Cachings zu beeinträchtigen. Dies bedeutet, dass der Cache gespeichert und erneut verwendet wird, wenn der Server mit 304 Not Modified antwortet.Wenn ein Caching-System No-Store korrekt implementiert, benötigen Sie keinen No-Cache. Aber nicht alle tun es. Darüber hinaus implementieren einige Browser No-Cache, als wäre es No-Store. Obwohl dies nicht unbedingt erforderlich ist, ist es wahrscheinlich am sichersten, beide einzuschließen.
quelle
Beachten Sie, dass Internet Explorer von Version 5 bis 8 einen Fehler auslöst, wenn Sie versuchen, eine Datei herunterzuladen, die über https und die vom Server gesendeten
Cache-Control: no-cache
oderPragma: no-cache
Header bereitgestellt wird .Siehe http://support.microsoft.com/kb/812935/en-us
Die Verwendung von
Cache-Control: no-store
undPragma: private
scheint das Nächste zu sein, was noch funktioniert.quelle
Cache-Control: no-store, no-cache, must-revalidate
genau diese Reihenfolge festlegen , damit es funktioniert. In unserem Szenario hat dies jedoch nicht funktioniert, aber was @bassim oben vorgeschlagen hat, hat funktioniert. Vielen Dank!Bei Chrome wird No-Cache verwendet, um die Seite bei einem erneuten Besuch neu zu laden. Sie wird jedoch weiterhin zwischengespeichert, wenn Sie in den Verlauf zurückkehren (Schaltfläche "Zurück"). Verwenden Sie no-store, um die Seite auch für den Verlauf zurückzuladen. IE muss erneut validiert werden, um in allen Fällen funktionieren zu können.
Nur um sicherzugehen, dass ich alle Fehler und Fehlinterpretationen vermeide, die ich immer benutze
wenn ich sicherstellen will, dass es neu geladen wird.
quelle
Ursprünglich haben wir vor vielen Jahren No-Cache verwendet und sind mit bestimmten Browsern auf einige Probleme mit veralteten Inhalten gestoßen ... Erinnern Sie sich leider nicht an die Einzelheiten.
Wir hatten uns seitdem NUR für die Nutzung von No-Store entschieden. Habe seitdem nie mehr zurückgeschaut oder hatte ein einziges Problem mit veralteten Inhalten durch einen Browser oder Vermittler.
Dieser Raum wird sicherlich von der Realität der Implementierungen im Vergleich zu dem, was zufällig in verschiedenen RFCs geschrieben wurde, dominiert. Insbesondere viele Proxies neigen dazu zu glauben, dass sie die Leistung besser verbessern können, indem sie die Richtlinien, die sie befolgen sollen, durch ihre eigenen ersetzen.
quelle
no-store
.Um die Sache noch schlimmer zu machen, kann in manchen Situationen kein Cache verwendet werden, aber kein Speicher kann:
http://faindu.wordpress.com/2008/04/18/ie7-ssl-xml-flex-error-2032-stream-error/
quelle
OWASP diskutiert dies:
Quelle hier .
quelle
no-cache
sagt, dass Sie es nicht verwenden können, ohne mit dem Server zu validieren . Wenn Ihre zwischengespeicherte Kopie immer noch gut ist, antwortet der Server mit einem 304 und Sie verwenden dann Ihre zwischengespeicherte Kopie. Spart Ihnen einen potenziell großen Netzwerk-Download.no-store
Auf der anderen Seite heißt es, dass Sie die Daten überhaupt nicht zwischenspeichern dürfen.