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
。
これが私がこれまでに試したことです:
- ランダム変数値で iframe URL を変更する
- Expires、Cache-Control、Pragma ヘッダーを外側の Web ページに追加する
- Expires、Cache-Control、Pragma ヘッダーを内部 Web ページに追加する
同一生成元ポリシーによってブロックされているため、JavaScript トリックを行うことができません。
私はアイデアが不足しています。ブラウザーが iframe コンテンツをキャッシュしないようにする方法を知っている人はいますか?
アップデート
Daniel が別のテストを実行するよう提案したので、Fiddler2 をインストールしましたが、残念ながら、まだ同じ結果が得られています。
これは私が行ったテストです:
Math.random()
外側のページは、JSP で使用して乱数を生成します。- 外部ページはウェブページ上に乱数を表示します。
- 外部ページは iframe を呼び出し、乱数を渡します。
- 内部ページには乱数が表示されます。
このテストでは、どのページが更新され、どのページがキャッシュされているかを正確に確認できます。
ビジュアルテスト
簡単なテストとして、ページを読み込んで別のページに移動し、[戻る] を押します。結果は次のとおりです。
元のページ:
- 外のページ: 0.21300034290246206
- 内部ページ: 0.21300034290246206
ページを離れてから、次のように打ち返します。
- 外側のページ: 0.4470929019483644
- 内部ページ: 0.21300034290246206
これは、外側のページが URL で別の GET パラメータを使用して呼び出しているにもかかわらず、内側のページがキャッシュされていることを示しています。何らかの理由で、ブラウザーは iframe が新しい URL を要求しているという事実を無視しています。古いものをロードするだけです。
フィドラーテスト
案の定、Fiddler も同じことを確認しています。
(ページを読み込みます。)
外部ページが呼び出されます。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 ブラウザが iframe URL をキャッシュしないようにする方法について、何か考えがある人はいますか?