web-dev-qa-db-ja.com

ASP.NETのキャッシュ制御ヘッダー

Webアプリケーションのキャッシュ制御ヘッダーを設定しようとしています(それが可能であるように見えます)が、ヘッダー応答の奇妙なエントリだと思っています。私の実装は次のとおりです:

    protected override void OnLoad(EventArgs e)
    {
        // Set Cacheability...
        DateTime dt = DateTime.Now.AddMinutes(30);
        Response.Cache.SetExpires(dt);
        Response.Cache.SetMaxAge(new TimeSpan(dt.ToFileTime()));

        // Complete OnLoad...
        base.OnLoad(e);
    }

そして、これはヘッダー応答が示すものです:

-----
GET /Pages/Login.aspx HTTP/1.1
Host: localhost:1974
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
X-lori-time-1: 1244048076221
Cache-Control: max-age=0

HTTP/1.x 200 OK
Server: ASP.NET Development Server/8.0.0.0
Date: Wed, 03 Jun 2009 16:54:36 GMT
X-AspNet-Version: 2.0.50727
Content-Encoding: gzip
Cache-Control: private, max-age=31536000
Expires: Wed, 03 Jun 2009 17:24:36 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 6385
Connection: Close
-----
  1. 「Cache-Control」プロパティが2回表示されるのはなぜですか?
  2. 「Cache-Control」プロパティと「Expires」プロパティの両方が必要ですか?
  3. 「Page_Load」はこのコードを配置するのに最適な場所ですか?

ありがとう!

27
Jason Kiesel

最大経過時間をはるかに設定している場合は、この行を追加することもできます。

// Summary:
// Sets Cache-Control: public to specify that the response is cacheable
// by clients and shared (proxy) caches.    
Response.Cache.SetCacheability(HttpCacheability.Public);

DBに保存されているファイルのリクエストを処理するファイルハンドラーからのドキュメントと画像を使用して、多くの応答ヘッダー操作を行います。

あなたの目標に応じて、あなたは本当にブラウザにローカルで何日間もあなたのほとんどすべてのページをキャッシュさせることができます(それがあなたが望む/必要としている場合)。

編集:

また、最大年齢を間違って設定している可能性もあります...

Response.Cache.SetMaxAge(new TimeSpan(dt.Ticks - DateTime.Now.Ticks ));

この行は、ローカルブラウザのキャッシュ時間を30分に設定しています[max-age = 1800]

2xキャッシュ制御行については、ヘッダーが自動的に追加されるようにIISが設定されているかどうかを確認することをお勧めします。

22
BigBlondeViking

キャッシュコントロールが2回表示されません。 1つは要求にあり、もう1つは応答にあります。リクエストに含まれているのは、おそらくブラウザーまたはShiftキーを押しながらF5キーを押したためです。

2番目の質問:それは、キャッシュヘッダーで何を実現したいかによって異なります。

Max-ageで何を達成したいのかわかりません。 DateTimeをTimeSpanに誤って変換したため、値が高すぎます。代わりにTimeSpan.FromMinutesを使用しないのはなぜですか?

ページの読み込みは問題ありません。私は通常、HTTPヘッダーをいじります。

12
chris166