none
WebBrowserのページキャッシュ寿命 RRS feed

  • 質問

  • 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
    2006年11月23日 9:24

回答

  • 今回のような場合はWebBrowserが不審な挙動をしていると思っていよいのでしょうか?

    IEではキャッシュされないような動的なページをキャッシュしてしまっています。

    かどうかを確認されるために、「HTTP 通信のプロトコルログを取得するツールを使って、正しく通信しているのか検証する必要があります」と、おがわみつぎさんは助言下さっているのではないでしょうか。

    例えば、HTTP/1.1 だと ``Cache-Control: no-cache'' などの記述が Response Header に存在しているのかどうか気になるところです。

    HTTP/1.0 だと ``Pragma: no-cache'' になるのでしょうか。

     

    2006年11月29日 4:11
  • 本来、ページのキャッシュコントロールは Web サーバの役割です。
    正しく、ページを絶対にキャッシュさせないという設定をしていないと、思わぬところでキャッシュされ、障害が発生するものです。

    で、WebBrowser.Refresh には WebBrowserRefreshOption 列挙体を引数に持つ WebBrowser.Refresh メソッドを使っても同じなのでしょうか?

    this.webBrowser1.Refresh(WebBrowserRefreshOption.Completely);

    って感じです。

    あと、こういうときには HTTP 通信のプロトコルログを取得するツールを使って、正しく通信しているのか検証する必要があります。
    Fiddler(http://www.fiddlertool.com/fiddler/) を使ってみてください。

    2006年11月23日 22:13

すべての返信

  • 本来、ページのキャッシュコントロールは Web サーバの役割です。
    正しく、ページを絶対にキャッシュさせないという設定をしていないと、思わぬところでキャッシュされ、障害が発生するものです。

    で、WebBrowser.Refresh には WebBrowserRefreshOption 列挙体を引数に持つ WebBrowser.Refresh メソッドを使っても同じなのでしょうか?

    this.webBrowser1.Refresh(WebBrowserRefreshOption.Completely);

    って感じです。

    あと、こういうときには HTTP 通信のプロトコルログを取得するツールを使って、正しく通信しているのか検証する必要があります。
    Fiddler(http://www.fiddlertool.com/fiddler/) を使ってみてください。

    2006年11月23日 22:13
  • レスありがとうございます。

    >ページのキャッシュコントロールは Web サーバの役割です。

    なるほど。

    本来、キャッシュはクライアント側で制御するべきではない、ということですね。


    今回のような場合はWebBrowserが不審な挙動をしていると思っていよいのでしょうか?

    IEではキャッシュされないような動的なページをキャッシュしてしまっています。

    WebBrowserコントロールをもっているアプリ自体を再起動すると、キャッシュは無効化されるようですが・・・。


    Refreshを利用すればキャッシュが強制的に無効化されるとのこと、了解です。

    非常に助かりました。

    ありがとうございます。


    2006年11月27日 19:22
  • 今回のような場合はWebBrowserが不審な挙動をしていると思っていよいのでしょうか?

    IEではキャッシュされないような動的なページをキャッシュしてしまっています。

    かどうかを確認されるために、「HTTP 通信のプロトコルログを取得するツールを使って、正しく通信しているのか検証する必要があります」と、おがわみつぎさんは助言下さっているのではないでしょうか。

    例えば、HTTP/1.1 だと ``Cache-Control: no-cache'' などの記述が Response Header に存在しているのかどうか気になるところです。

    HTTP/1.0 だと ``Pragma: no-cache'' になるのでしょうか。

     

    2006年11月29日 4:11
  • > Takashi SAKAMOTO さん

    レスありがとうございます。

    ツールを使って調べてみます。

    2006年11月29日 9:44
  • > F5では

    更新のみではないです。

    非常に難しく、、考えてみるには、、、

    ま、考えてみて今があるとしたら、

    それは、非常に価値があったのでは、、と思います。

    ちなみに、、

    Ctrl + F5 でビルドできますよ。

    ショートカットキーが今のOS問わず、、

    生命線です。

    非常にしつれいな言い回しですが、基本に忠実でいてくださいね。

    ではでは、、

    2011年1月2日 6:48