- PR -

IEでのキャッシュ無効化

投稿者投稿内容
ASA
会議室デビュー日: 2004/05/27
投稿数: 6
投稿日時: 2004-07-16 10:41
こんにちは。
こちらの環境では、以下を指定するとIEでもキャッシュが無効になるようです。
//有効期間を昔に
setHeader("Expires", "-1");
//通常のHTTP/1.1 no-cache ヘッダ
setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
//IE用拡張ヘッダ
addHeader("Cache-Control", "post-check=0, pre-check=0");
//通常のHTTP/1.0 no-cache ヘッダ
setHeader("Pragma", "no-cache");

では。
未記人
会議室デビュー日: 2004/07/12
投稿数: 9
投稿日時: 2004-07-16 19:31
aaさん、ASAさん、返信ありがとうございます。

引用:
高速化のためにメモリ内に残していると考えるのが自然でしょうね。

メモリにキャッシュされると手が出なそうですね。
この辺の情報をお持ちの方はいらっしゃるでしょうか?

ヘッダは","区切りで複数設定できるんですね。
早速試してみたのですが、私の環境では
戻るボタンで前のページが表示されてしまいました。
未記人
会議室デビュー日: 2004/07/12
投稿数: 9
投稿日時: 2004-07-20 10:49
↓このサイトに
http://www.microsoft.com/japan/developer/weeklynews/webteam000825.asp
↓こんなことが書いてありました。
引用:
<A HREF="next.html" onclick="javascript:location.replace(this.href); event.returnValue=false; event.cancelBubble=true;">
ここをクリックすると、次のページに移動しますがこのページの履歴は残りません。
</A>

これだと、戻るボタンで前のページが表示されないのですが、
GETになるので、Temporary Internet Filesにキャッシュが残ってしまいます。
これとヘッダを組み合わせれば完璧なのですが、試してもうまくいきません。
submitとreplaceを同時にやるのは無理でしょうか?
会議室デビュー日: 2003/11/21
投稿数: 2
投稿日時: 2004-07-28 15:49
こんにちわ
 
話がもどるのですが

はじめまして。


>無効化されるページと、されないページの違いはなんでしょう?
>何か思いつきますか?
>まさかGETだ、とかそういうオチではないですよね・・・

getだとなぜキャシュが残らないのでしょうか?
ローカルで試験して
getだと残りましたが
javascriptでpostしなおしてみたら
残りませんでした。

こういう仕様なのでしょうか?
EAST
会議室デビュー日: 2004/07/27
投稿数: 4
投稿日時: 2004-07-28 18:50
こんにちは。
キャッシュが無効化されるのは
sessionがnewされるタイミングだったりもしますよね。


ちょっと話がずれちゃいますが

ブラウザのバックボタンで戻って処理をしたり、
同一sessionのブラウザを複数作成して処理したくないということであれば
せっかくStrutsなので
トランザクション・トークンの使用はいかがでしょうか?

話がそれすぎちゃいますか?
未記人
会議室デビュー日: 2004/07/12
投稿数: 9
投稿日時: 2004-07-29 14:36
島さん、EASTさん、返信ありがとうございます。

GETとPOSTでなぜ違うのかは私も分かりません。
私も知りたいので、アドバイスを頂けるとありがたいです。

トランザクション・トークンですが、丁度今やっていまして、

#トランザクション・トークンでも、少し詰まってい、
#新しいスレッドを立てようかと迷っているところです・・・

目的は、2度押し防止なのですが、
ブラウザの戻るボタンの処理に対しても使えるものなのでしょうか?
がるがる
ぬし
会議室デビュー日: 2002/04/12
投稿数: 873
投稿日時: 2004-07-29 15:18
どもでふ。がるです。
ちっと自分でも興味があって調べたので、調査結果を載せてみました。
ご意見/ご質問などいただければ幸いです。
なお、以下の文章は、RFC2616(HTTP1.1)の基本文書を元に考察しています。
# これ以降で新しいのが出てたら…教えてください ^^;

まずExpiresヘッダなのですが。これは原則としては「日付フォーマット(RFC1123規定)」
か、もしくは「0という値(期限切れを意味する)」とあったと思うのですが。
-1も有効になるんでしょうか?

ちなみに、Expiresヘッダは「Cache-Controlにmax-ageを含む内容が設定されていた」
場合、Cache-Controlの方が優位に立つようです。

あと、Cache-ControlはHTTP1.0では存在していないらしく、HTTP1.0準拠のブラウザ
(いまどきあるのか?)を考慮した場合「Pragma: no-cache」は必須になるみたいです。

んで、Cache-Controlですが…めんどいです(笑
どうも、基本はやはり「no-cache」みたいなのですが。

「no-store」は「保存媒体にこのHTMLレスポンスを保存してはならない」っていう
意味合いみたいです。つまり、例えばファイルに「CGIによって生成されたHTMLを
保存する」ようなことをするな、っていう宣言ですね。

あと「max-age」ってのもあって、「max-age=0」とやると「キャッシュするな」っていう
意味合いにはなるですが、no-cacheとの共存は推奨されていないみたいです。
ので、max-ageは使わないほうがいいみたいですね。

「must-revalidate」は…微妙かなぁ、と個人的には。
読解力が正しければ、少なくともExpiresヘッダ、max-age指示子、max-stale指示子と
併用するときには細心の注意を払ったほうが良い感じです。
must-revalidateは「キャッシュが(時間軸指示的に:つまりExpiresヘッダ、max-age指示子、
max-stale指示子を基準にしたときに)正しいかどうかを必ず再検証すること」という
指示子になるです。

このあたりから考えると、Cache-Controlは
・単純にキャッシュさせたくないなら「Cache-Control: no-cache」
・保存もさせたくないなら「Cache-Control: no-cache, no-store」
・念のために(他のヘッダにも注意を払いながら)なら
 「Cache-Control: no-cache, no-store, must-revalidate」
って感じみたいですね。

「Cache-Control: post-check=0, pre-check=0」は、さすが「IE拡張」だけあって、
RFCじゃ全然見つかりません(T_T)
んでまぁ、MSのサイトから関連するPageが見つかりました。
http://www.microsoft.com/japan/msdn/web/ie/ie50/icpie5.asp
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemwebhttpcachepolicyclassappendcacheextensiontopic.asp
まぁ他にもあるとは思うのですが。
このPageの記述からすると、どうも

pre-chec=[n]:コンテンツがn秒変更されないことを意味する
post-check=[n]:コンテンツ取得からn秒以上経過した場合、キャッシュは使うが
バックグラウンドで新しいコンテンツの検証を行い、必要に応じて新しい
コンテンツを取得しなおす

という意味合いみたいです。
ので、両方とも0にすれば、no-cacheと同じ意味合いになるみたいです。
(でも、Expires: 0 で問題なさそうな記述がある辺りが微妙だなぁ、っと)

それでは〜。
未記人
会議室デビュー日: 2004/07/12
投稿数: 9
投稿日時: 2004-08-03 11:59
がるがるさん、返信ありがとうございます。
レスが遅くなって申し訳ありません。
詳細な調査結果をありがとうございます。

引用:
まずExpiresヘッダなのですが。これは原則としては「日付フォーマット(RFC1123規定)」
か、もしくは「0という値(期限切れを意味する)」とあったと思うのですが。
-1も有効になるんでしょうか?

以前に、"日付"も"0"も試したのですが、"−1"との差が分からなかったので、
"−1"としました。ちなみに、"−1"にしたのは、
↓このMSのサイトに"−1"でやるような記述があった為です。
http://support.microsoft.com/default.aspx?scid=kb;ja;234067

一つ質問なのですが、
Strutsでもno-cacheの設定が出来ることを最近知りまして、
ソースを見ると、Expires を "1"に設定しているのですが、
"1"の場合はどういう意味になるのでしょうか?

Cache-Controlの設定については、
試すのに時間がかかりそうなので、出来次第報告させてください。

スキルアップ/キャリアアップ(JOB@IT)