2009-06-03 12 views
26

Webアプリケーション用のキャッシュコントロールヘッダーを設定しようとしていますが、私はこれを行うことができると思われますが、奇妙なエントリがあると思いますヘッダーの応答。ASP.NETのキャッシュコントロールヘッダー

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. "Cache-Control"と "Expires"の両方のプロパティが必要ですか?
  3. "Page_Load"はこのコードを配置するのに最適な場所ですか?

ありがとう!

答えて

12

キャッシュ制御が2回表示されません。 1つは要求にあり、1つは応答にあります。リクエストに含まれているのは、ブラウザでShift + F5を押すなどの理由によるものでしょう。

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

max-ageで達成したいことがわかりません。 DateTimeを間違ってTimeSpanに変換したため、値が高すぎます。代わりに、代わりにTimeSpan.FromMinutesを使用してみませんか?

ページの読み込みに問題はありません。私は通常HTTPヘッダーを自分自身で使いこなしています。

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

私がリクエストを処理するファイルハンドラから文書や画像を持つレスポンスヘッダのマニピュレータの多くを行う:

21

はまた、あなたがそこまで出て最高年齢を設定している場合は、この行を追加したい場合がありますファイルはDBに保存されます。

あなたの目標に応じて、あなたは実際にブラウザにあなたのほとんどすべてのページをローカルにキャッシュすることができます(必要なものがあれば)。私はまた、あなたが間違っている最大年齢を設定するかもしれないと思う

...

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

この行セットはローカルブラウザ上で30分のキャッシュ時間にある[最大エージング= 1800:

編集

]

2xキャッシュコントロールラインについては、ヘッダーを自動的に追加するようにIISが設定されているかどうかを確認したい場合があります。

+1

私は同じ問題を抱えていました。IISでは、サイト全体、フォルダ、または個々のファイルに対して、キャッシュヘッダーをいくらか細かく設定できます。 IIS(6)でさらに制御したい場合は、メタベースエディタもチェックアウトすることができます。 – Gyuri

関連する問題