Wie verhindern Sie, dass Firefox und Safari Iframe-Inhalte zwischenspeichern?
Ich habe eine einfache Webseite mit einem Iframe zu einer Seite auf einer anderen Site. Sowohl die äußere als auch die innere Seite verfügen über HTTP-Antwortheader, um das Caching zu verhindern. Wenn ich im Browser auf die Schaltfläche "Zurück" klicke, funktioniert die äußere Seite ordnungsgemäß, aber egal was passiert, der Browser ruft immer einen Cache der iframed-Seite ab. IE funktioniert gut, aber Firefox und Safari machen mir Probleme.
Meine Webseite sieht ungefähr so aus:
<html>
<head><!-- stuff --></head>
<body>
<!-- stuff -->
<iframe src="webpage2.html?var=xxx" />
<!-- stuff -->
</body>
</html>
Die var
Variable ändert sich immer. Trotz der Tatsache, dass sich die URL des Iframes geändert hat (und der Browser daher eine neue Anfrage an diese Seite stellen sollte), ruft der Browser nur den zwischengespeicherten Inhalt ab.
Ich habe die hin und her gehenden HTTP-Anforderungen und -Antworten untersucht und festgestellt, dass <iframe src="webpage2.html?var=222" />
der Browser auch dann abruft, wenn die äußere Seite enthält webpage2.html?var=111
.
Folgendes habe ich bisher versucht:
- Ändern der iframe-URL mit zufälligem var-Wert
- Hinzufügen von Expires-, Cache-Control- und Pragma-Headern zur äußeren Webseite
- Hinzufügen von Expires-, Cache-Control- und Pragma-Headern zur inneren Webseite
Ich kann keine JavaScript-Tricks ausführen, da ich von derselben Richtlinie blockiert werde.
Mir gehen die Ideen aus. Weiß jemand, wie man den Browser daran hindert, den iframed-Inhalt zwischenzuspeichern?
Aktualisieren
Ich habe Fiddler2 installiert, als Daniel vorgeschlagen hat, einen weiteren Test durchzuführen, und leider erhalte ich immer noch die gleichen Ergebnisse.
Dies ist der Test, den ich durchgeführt habe:
- Die äußere Seite generiert eine Zufallszahl
Math.random()
in JSP. - Die äußere Seite zeigt eine Zufallszahl auf der Webseite an.
- Die äußere Seite ruft iframe auf und übergibt eine Zufallszahl.
- Auf der Innenseite wird eine Zufallszahl angezeigt.
Mit diesem Test kann ich genau sehen, welche Seiten aktualisiert und welche Seiten zwischengespeichert werden.
Visueller Test
Für einen schnellen Test lade ich die Seite, navigiere zu einer anderen Seite und drücke dann "Zurück". Hier sind die Ergebnisse:
Originalseite:
- Äußere Seite: 0.21300034290246206
- Innere Seite: 0.21300034290246206
Seite verlassen, dann zurückschlagen:
- Äußere Seite: 0.4470929019483644
- Innere Seite: 0.21300034290246206
Dies zeigt, dass die innere Seite zwischengespeichert wird, obwohl die äußere Seite sie mit einem anderen GET-Parameter in der URL aufruft. Aus irgendeinem Grund ignoriert der Browser die Tatsache, dass der Iframe eine neue URL anfordert. es lädt einfach den alten.
Geigen-Test
Sicher genug, bestätigt Fiddler dasselbe.
(Ich lade die Seite.)
Die äußere Seite wird aufgerufen. HTML:
0.21300034290246206
<iframe src="http://ipv4.fiddler:1416/page1.aspx?var=0.21300034290246206" />
http: //ipv4.fiddler: 1416 / page1.aspx? var = 0.21300034290246206 wird aufgerufen.
(Ich navigiere von der Seite weg und drücke dann zurück.)
Die äußere Seite wird aufgerufen. HTML:
0.4470929019483644
<iframe src="http://ipv4.fiddler:1416/page1.aspx?var=0.4470929019483644" />
http: //ipv4.fiddler: 1416 / page1.aspx? var = 0.21300034290246206 wird aufgerufen.
Aus diesem Test geht hervor, dass der Webbrowser die Seite nicht zwischenspeichert, sondern die URL des Iframes zwischenspeichert und dann eine neue Anforderung für diese zwischengespeicherte URL stellt. Ich bin jedoch immer noch ratlos, wie ich dieses Problem lösen kann.
Hat jemand Ideen, wie der Webbrowser daran gehindert werden kann, Iframe-URLs zwischenzuspeichern?