Wie um zu verhindern, dass die Inhalte angezeigt, die von Back-Forward-cache in Firefox?
Browser: Firefox 6.0
Habe ich Seite A mit den folgenden Einstellungen, um sicherzustellen, dass der Inhalt NICHT gespeichert wird, in der bfcache der browser:
1) $(window).unload(function(){});
2) Folgende HTTP-Header:
<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="expires" content="-1" />
<meta http-equiv="cache-control" content="no-cache"/>
Habe ich auch angeschlossen die Ereignisse pagehide
und pageshow
. Wenn ich die Navigation von der Seite Weg, pagehide
ist aufgerufen, mit den RICHTIGEN Wert für die Ereignis-Eigenschaft persisted = false
(das ist das, was benötigt wird: keine Persistenz im cache!)
Navigation nach ein paar Seiten habe ich ein window.history.go(-2);
zurück zur Seite A. An dieser Stelle, möchte ich von Firefox auf den server abfragt, für die aktualisierte version anstelle der Anzeige aus dem cache. Die pageshow
von Seite A aufgerufen wird, mit RICHTIGEN Wert für die Ereignis-Eigenschaftpersisted = false
(d.h. die Seite wird NICHT geladen, aus dem cache). ABER der Seiteninhalt wird nicht die server-Daten; es ist der veraltete Inhalte (gleiche wie bei der Navigation von der Seite Weg zunächst)! Fiddler auch nicht zeigen, eine neue Anfrage an den server.
Google Chrome zeigt auch das gleiche Verhalten. IE wie erwartet funktioniert (lädt neue Daten)!
Irgendeine Idee, was bin ich?
Vielen Dank im Voraus!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es mehrere caches beteiligt. Es ist der browser das Dokument-cache (bfache), der browser ist ein HTTP-cache und möglicherweise fortgeschrittene HTTP-caches.
Den
<meta>
tags, die Sie über haben absolut keine Wirkung in aktuellen Chrome-oder Firefox. Sie kann haben einen Effekt im IE.Chancen sind So, Ihre Seite ist einfach nur Lesen aus dem browser den HTTP-cache.
Wenn Sie wirklich wollen, zu senden no-cache-HTTP-Header, sollte man das tun. Aber Sie müssen die tatsächlichen HTTP-Header: wie ich oben sagte, die
<meta>
tag "äquivalente" nichts zu tun.Und, was noch wichtiger ist, alle anderen zwischengeschalteten caches sind nicht zu Parsen Ihre HTML, so könnte cache-Sachen, wenn Sie nicht wirklich senden Sie die richtigen HTTP-Header.
Cache-Control: no-cache Pragma: no-cache Expires: -1
Sie Leider nicht helfen. Nach Ihrer Antwort habe ich noch einmal die Kopf-und festgestellt, dass Firefox braucht einen anderen header Cachen zu verhindern: blog.httpwatch.com/2008/10/15/...Cache-Control: no-cache, no-store
Nach Zugabe der oben genannten header, es funktioniert jetzt OK in IE, Firefox, Chrome & Safari. Nur Opera immer noch falsch verhält, indem Sie Zwischenspeichern, aber ich werde zu verschieben, das Problem vorübergehend.no-cache
header bereits vorhanden war in meinem Fall. Von "zusätzlichen HTTP-header meinte ich dieno-store
header; das ist nicht erforderlich, wenn Sie SSL!Die Antwort unten nicht mehr funktioniert:
Vom Antwort auf ALSO, das hinzufügen einer
unload
Ereignis-Fenster bewirkt, dass der vorwärts/zurück-cache gelöscht werden.UPDATE. MÖGLICHE LÖSUNG:
BFCache bringen kann überraschungen für die Entwickler, denn zumindest in Firefox beim verschieben zurück/vorwärts die Seite nicht aktualisieren, auch wenn es gesagt wurde, indem die HTTP-Header. Es ist also besser, anzunehmen, dass die Seite wird nicht aktualisiert.
Auf der anderen Seite, was ist der Unterschied zwischen erste Seite mit veralteten Daten, da der BFCache, und die Suche nach einer Registerkarte in Ihrem browser, dass Sie nicht neu laden für das Alter?
Wenn Sie sich sorgen über solche Dinge, einige javascript schreiben, der prüft, server nach updates und lädt vertrauliche Informationen. Dies ist eine chance, um Ihre problem in win ).
unload
Ereignis-Fenster wiewindow.onunload = function () { console.log('lets unload windows');}
. Könnten Sie ein wenig genauer darüber, wie es zu tun? Vielen Dank.Wenn Sie
Cache-Control: "no-cache, no-store, must-revalidate"
http-Header die Seite nicht zwischengespeichert werden, die in back-forward-cache.Firefox sieht auch event-Handler auf
beforeunload
Ereignis als signal für nicht-store-Seite in BFC, aber Safari ignoriert solchen Handler, so ist es besser, korrekte http-Header zur Angabe der Art der Seite, Inhalt (cacheable oder variable)