トップ回答者
WebBrowserのページキャッシュ寿命

質問
-
WebBrowserで同じページに短時間で再度アクセスするとキャッシュが適用されます。
cgiを使っているページだとこの機能のおかげで困ることがあります。
例えば、http://hoge.com/piyo.cgiでログインページが現れるとします。
で、ログインしている状態だと、同じhttp://hoge.com/piyo.cgiで、自分のアカウントのページが現れる、というような場合です。
キャッシュが適用されると自分のアカウントのページが現れて欲しいときにログインページが現れてしまいます。
常に、キャッシュを適用せずサーバーにアクセスする方法はありますでしょうか?
ちなみに、MSDNのWebBrowser.Refresh()のページには以下のような文言がありますが、キャッシュ内での寿命を制御する方法がみつかりませんでした。
>WebBrowser コントロールは、最近訪れたサイトの Web ページをローカル ハード ディスク上のキャッシュに格納します。ページごとに、キャッシュ内で存続できる時間を示す有効期限を指定できます。
■環境
OS:Windows2000 or XP
言語:.Net Framework 2.0
回答
-
今回のような場合はWebBrowserが不審な挙動をしていると思っていよいのでしょうか?
IEではキャッシュされないような動的なページをキャッシュしてしまっています。かどうかを確認されるために、「HTTP 通信のプロトコルログを取得するツールを使って、正しく通信しているのか検証する必要があります」と、おがわみつぎさんは助言下さっているのではないでしょうか。
例えば、HTTP/1.1 だと ``Cache-Control: no-cache'' などの記述が Response Header に存在しているのかどうか気になるところです。
HTTP/1.0 だと ``Pragma: no-cache'' になるのでしょうか。
-
本来、ページのキャッシュコントロールは Web サーバの役割です。
正しく、ページを絶対にキャッシュさせないという設定をしていないと、思わぬところでキャッシュされ、障害が発生するものです。で、WebBrowser.Refresh には WebBrowserRefreshOption 列挙体を引数に持つ WebBrowser.Refresh メソッドを使っても同じなのでしょうか?
this.webBrowser1.Refresh(WebBrowserRefreshOption.Completely);
って感じです。
あと、こういうときには HTTP 通信のプロトコルログを取得するツールを使って、正しく通信しているのか検証する必要があります。
Fiddler(http://www.fiddlertool.com/fiddler/) を使ってみてください。
すべての返信
-
本来、ページのキャッシュコントロールは Web サーバの役割です。
正しく、ページを絶対にキャッシュさせないという設定をしていないと、思わぬところでキャッシュされ、障害が発生するものです。で、WebBrowser.Refresh には WebBrowserRefreshOption 列挙体を引数に持つ WebBrowser.Refresh メソッドを使っても同じなのでしょうか?
this.webBrowser1.Refresh(WebBrowserRefreshOption.Completely);
って感じです。
あと、こういうときには HTTP 通信のプロトコルログを取得するツールを使って、正しく通信しているのか検証する必要があります。
Fiddler(http://www.fiddlertool.com/fiddler/) を使ってみてください。 -
レスありがとうございます。
>ページのキャッシュコントロールは Web サーバの役割です。
なるほど。
本来、キャッシュはクライアント側で制御するべきではない、ということですね。
今回のような場合はWebBrowserが不審な挙動をしていると思っていよいのでしょうか?
IEではキャッシュされないような動的なページをキャッシュしてしまっています。
WebBrowserコントロールをもっているアプリ自体を再起動すると、キャッシュは無効化されるようですが・・・。
Refreshを利用すればキャッシュが強制的に無効化されるとのこと、了解です。
非常に助かりました。
ありがとうございます。 -
今回のような場合はWebBrowserが不審な挙動をしていると思っていよいのでしょうか?
IEではキャッシュされないような動的なページをキャッシュしてしまっています。かどうかを確認されるために、「HTTP 通信のプロトコルログを取得するツールを使って、正しく通信しているのか検証する必要があります」と、おがわみつぎさんは助言下さっているのではないでしょうか。
例えば、HTTP/1.1 だと ``Cache-Control: no-cache'' などの記述が Response Header に存在しているのかどうか気になるところです。
HTTP/1.0 だと ``Pragma: no-cache'' になるのでしょうか。
-
> F5では
更新のみではないです。
非常に難しく、、考えてみるには、、、
ま、考えてみて今があるとしたら、
それは、非常に価値があったのでは、、と思います。
ちなみに、、
Ctrl + F5 でビルドできますよ。
ショートカットキーが今のOS問わず、、
生命線です。
非常にしつれいな言い回しですが、基本に忠実でいてくださいね。
ではでは、、
- 回答の候補に設定 daichan4520021001 2011年1月2日 6:48