1. ホーム
  2. browser

[解決済み] ブラウザでのiframeキャッシュの禁止

2023-01-22 14:46:38

質問

Firefox と Safari が iframe のコンテンツをキャッシュするのを防ぐにはどうしたらよいですか?

私は、別のサイトのページへの iframe を持つ単純な Web ページを持っています。外部ページと内部ページの両方が、キャッシュを防ぐために HTTP レスポンス ヘッダーを持っています。ブラウザで "back" ボタンをクリックすると、外部ページは適切に動作しますが、何があっても、ブラウザは常に iframed ページのキャッシュを取得します。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 ヘッダを追加する
  • 内側のウェブページに Expires、Cache-Control、および Pragma ヘッダを追加する。

同一生成元ポリシーに阻まれ、JavaScriptの技ができない。

アイデアが尽きてしまいました。ブラウザがiframedコンテンツをキャッシュしないようにする方法をご存知の方はいらっしゃいますか?

更新

Daniel が提案したように Fiddler2 をインストールして別のテストを行ったのですが、残念ながらまだ同じ結果が得られています。

これは私が実行したテストです。

  1. 外側のページが乱数を生成するには Math.random() で乱数を生成する。
  2. 外側のページには乱数が表示されます。
  3. 外側のページがiframeを呼び出し、乱数を渡します。
  4. 内部ページが乱数を表示する。

このテストでは、どのページが更新され、どのページがキャッシュされているかを正確に確認することができます。

視覚テスト

簡単なテストとして、ページを読み込んで、別のページに移動し、quot;back.quot; を押してみました。

元のページ。

  • 外側のページ 0.21300034290246206
  • 内側のページ。0.21300034290246206

ページを離れ、そして戻る。

  • ページの外側。0.4470929019483644
  • 内側のページ 0.21300034290246206

これは、外部ページが URL に異なる GET パラメータを使用して呼び出しているにもかかわらず、内部ページがキャッシュされていることを示しています。何らかの理由で、ブラウザは iframe が新しい URL を要求しているという事実を無視し、単に古いものをロードしています。

Fiddler テスト

案の定、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 をキャッシュしないようにする方法について、どなたかアイデアをお持ちですか?

どのように解決するのですか?

iframe の URL を、iframe の実際のコンテンツを取得し返すプロキシとして機能する、あなたのサイトのページを指すようにします。これで、同一生成元ポリシーに縛られることがなくなります (編集: iframe のキャッシュの問題は防げません)。