web-dev-qa-db-ja.com

IEキャッシングを防ぐ

Strutsを使用してJava EEWebアプリケーションを開発しています。問題はInternetExplorerのキャッシュにあります。ユーザーがログアウトすると、キャッシュされて要求が行われないため、一部のページにアクセスできます。更新を押すと正常に機能します。また、ユーザーが再度ログインページにアクセスしても、そのページもキャッシュされるため、リダイレクトされません。

2つの解決策が思い浮かびます。

  1. インターセプター(サーブレットフィルターのような)を記述して、応答ヘッダーにキャッシュなしなどを追加します。
  2. またはまたは置く<meta>各ページのタグ。

どちらをすればいいですか?

17
GorillaApe

むしろ、問題のページのHttpServletResponseに次のヘッダーを設定して、すべてのページに手動でコピーアンドペーストする必要がないようにします。

response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
response.setDateHeader("Expires", 0); // Proxies.

これは、ページに次のメタヘッダーを手動で設定するのと同じです。

<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="0">

この回答 も参照してください。テストする前にブラウザのキャッシュをクリアすることを忘れないでください;)

29
BalusC

私は以下がうまく機能することを発見しました:

response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate, max-age=0, proxy-revalidate, no-transform, pre-check=0, post-check=0, private");
response.setHeader("Pragma", "no-cache");
response.setDateHeader("Expires", 0);

この質問のタグから、Strutsを使用しているように見えます。 Struts 1.xでは、controller要素にnocache="true"を設定することにより、struts-config.xmlの構成を通じてこれを行うことができます。

<controller processorClass="org.Apache.struts.tiles.TilesRequestProcessor" nocache="true" />

Mark Nottinghamの キャッシングチュートリアル は、HTTPとキャッシングについて、Webで見た中で最高のリソースです。

そうは言っても、表示されている問題によっては、ブラウザの履歴の問題である可能性があります。詳細については、 ここ を参照してください。

5
laz

IE <9は、プラグマがある場合でもキャッシュされます:ヘッドにキャッシュがなく、ページが読み込まれるたびに更新するようにブラウザを設定します。メタタグをもう一度追加する必要があります。 htmlを閉じる前のヘッドセクション。これはMS自体からのものです。

http://support.Microsoft.com/kb/222064/

ここでもう少し良い説明

http://www.htmlgoodies.com/beyond/reference/article.php/3472881/So-You-Dont-Want-To-Cache-Huh.htm

テストから、Expires:-1メタタグも必要です。 Expires:0ではなく-1を使用することをお勧めします。

2
Andy N

タグtype = "button"を実際のアクションボタンに追加します。

Type属性のデフォルト値は、現在のドキュメント互換モードによって異なります。デフォルト値はsubmitです。他の互換モードでは、デフォルト値はボタンです。 BUTTON要素がフォームで送信される場合、値は現在のドキュメント互換モードによって異なります。 Windows Internet Explorer8以降。 type属性のデフォルト値は、現在のドキュメント互換モードによって異なります。 IE8標準モードでは、デフォルト値は送信です。他の互換モードおよび以前のバージョンのWindowsInternet Explorerでは、デフォルト値はボタンです。 Internet Explorer8以降。 BUTTON要素がフォームで送信される場合、値は現在のドキュメント互換モードによって異なります。 IE8モードでは、value属性が送信されます。他のドキュメントモードおよび以前のバージョンのInternetExplorerでは、innerText値が送信されます。

http://msdn.Microsoft.com/en-us/library/ie/ms535211(v = vs.85).aspx

0
Alex.Zhe.Han