FirefoxとSafariがiframeコンテンツをキャッシュしないようにするにはどうすればよいですか?
別のサイトのページへのiframeを含む単純なWebページがあります。外側のページと内側のページの両方に、キャッシュを防ぐためのHTTP応答ヘッダーがあります。ブラウザの「戻る」ボタンをクリックすると、外側のページは正しく機能しますが、何があっても、ブラウザは常にiframeページのキャッシュを取得します。IEは問題なく動作しますが、FirefoxとSafariが問題を引き起こしています。
私のウェブページは次のようになります。
<html>
<head><!-- stuff --></head>
<body>
<!-- stuff -->
<iframe src="webpage2.html?var=xxx" />
<!-- stuff -->
</body>
</html>
var
変数は常に変化します。iframeのURLが変更されたという事実にもかかわらず(したがって、ブラウザーはそのページに対して新しい要求を行う必要があります)、ブラウザーはキャッシュされたコンテンツをフェッチするだけです。
HTTPリクエストとレスポンスを行ったり来たりして調べたところ、外側のページにが含まれていても<iframe src="webpage2.html?var=222" />
、ブラウザはフェッチすることに気付きましたwebpage2.html?var=111
。
これが私がこれまでに試したことです:
- ランダムなvar値でiframeURLを変更する
- Expires、Cache-Control、およびPragmaヘッダーを外部Webページに追加する
- Expires、Cache-Control、およびPragmaヘッダーを内部Webページに追加する
同一生成元ポリシーによってブロックされているため、JavaScriptのトリックを実行できません。
アイデアが足りなくなりました。ブラウザがiframeコンテンツをキャッシュしないようにする方法を知っている人はいますか?
更新
ダニエルが別のテストを実行するように提案したので、Fiddler2をインストールしましたが、残念ながら、それでも同じ結果が得られます。
これは私が実行したテストです:
- 外側のページは
Math.random()
、JSPで使用して乱数を生成します。 - 外側のページは、Webページに乱数を表示します。
- 外側のページはiframeを呼び出し、乱数を渡します。
- 内側のページには乱数が表示されます。
このテストでは、どのページが更新され、どのページがキャッシュされているかを正確に確認できます。
ビジュアルテスト
簡単なテストのために、ページを読み込んで別のページに移動し、[戻る]を押します。結果は次のとおりです。
元のページ:
- 外側のページ:0.21300034290246206
- 内側のページ:0.21300034290246206
ページを離れて、反撃する:
- 外側のページ:0.4470929019483644
- 内側のページ:0.21300034290246206
これは、外側のページがURLの異なるGETパラメーターを使用して呼び出している場合でも、内側のページがキャッシュされていることを示しています。何らかの理由で、ブラウザはiframeが新しいURLを要求しているという事実を無視しています。古いものをロードするだけです。
フィドラーテスト
案の定、フィドラーは同じことを確認しています。
(ページをロードします。)
外側のページが呼び出されます。HTML:
0.21300034290246206
<iframe src="http://ipv4.fiddler:1416/page1.aspx?var=0.21300034290246206" />
http://ipv4.fiddler:1416 / page1.aspx?var = 0.21300034290246206が呼び出されます。
(ページから離れて、ヒットバックします。)
外側のページが呼び出されます。HTML:
0.4470929019483644
<iframe src="http://ipv4.fiddler:1416/page1.aspx?var=0.4470929019483644" />
http://ipv4.fiddler:1416 / page1.aspx?var = 0.21300034290246206が呼び出されます。
このテストからは、Webブラウザーがページをキャッシュしていないように見えますが、iframeのURLをキャッシュしてから、そのキャッシュされたURLに対して新しい要求を行っています。しかし、私はまだこの問題を解決する方法について困惑しています。
WebブラウザがiframeURLをキャッシュしないようにする方法について誰かがアイデアを持っていますか?