方法 : HTTP ヘッダーを使用してページのバージョンをキャッシュする
更新 : 2007 年 11 月
ASP.NET では、指定する HTTP ヘッダーの値に基づいてページの複数のバージョンをキャッシュできます。ページが要求されたときにアプリケーションに渡されるヘッダーは、単一のヘッダー、複数のヘッダー、またはすべてのヘッダーをキャッシュするように指定できます。
HTTP ヘッダーの値に基づいて、ページの複数のバージョンを宣言によってキャッシュするには
ASP.NET ページには、必要な Duration 属性と VaryByParam 属性または VaryByControl 属性を @ OutputCache ディレクティブを含めます。Duration 属性は、0 より大きい整数に設定する必要があります。HTTP ヘッダー値のみでキャッシュする場合は、VaryByParam 属性を "None" に設定する必要があります。
@ OutputCache ディレクティブに VaryByHeader 属性を含め、その値をキャッシュの内容を変更する HTTP ヘッダーの名前に設定します。
60 秒間ページをキャッシュし、Accept-Language HTTP ヘッダーによって渡される値に基づいてキャッシュするページのバージョンを設定する例を次に示します。
<%@ OutputCache Duration="60" VaryByParam="None" VaryByHeader="Accept-Language" %>
メモ : キャッシュする内容を複数のヘッダー値に基づいて切り替えるには、ヘッダー名の一覧をセミコロン (;) で区切って記述します。キャッシュする内容をすべてのヘッダー値に基づいて切り替えるには、VaryByHeader 属性の値をアスタリスク (*) に設定します。
HTTP ヘッダーの値に基づいて、ページの複数のバージョンをプログラムによってキャッシュするには
ページの Page_Load メソッドで、Response オブジェクトの Cache プロパティに対して SetCacheability メソッドと SetExpires メソッドを呼び出します。
VaryByHeaders プロパティの HTTP ヘッダーの値を true に設定します。
Accept-Language HTTP ヘッダーの値が異なる要求に対して、ページの複数のバージョンを 1 分間キャッシュする方法のコード例を次に示します。
protected void Page_Load(object sender, EventArgs e) { Response.Cache.SetExpires(DateTime.Now.AddMinutes(1d)); Response.Cache.SetCacheability(HttpCacheability.Public); Response.Cache.SetValidUntilExpires(true); Response.Cache.VaryByHeaders["Accept-Language"] = true; }
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Response.Cache.SetExpires(DateTime.Now.AddMinutes(1.0)) Response.Cache.SetCacheability(HttpCacheability.Public) Response.Cache.SetValidUntilExpires(True) Response.Cache.VaryByHeaders("Accept-Language") = true End Sub
メモ : 複数のヘッダーに基づいてキャッシュする内容を切り替える場合は、VaryByHeaders プロパティに複数の値を設定する必要があります。すべてのヘッダーに基づいてキャッシュする内容を切り替える場合は、VaryByHeaders["VaryByUnspecifiedParameters"] を true に設定します。
参照
処理手順
方法 : ASP.NET ページのキャッシュを宣言によって設定する
方法 : 要求元のブラウザを使用してページのバージョンをキャッシュする
方法 : パラメータを使用してページのバージョンをキャッシュする
方法 : カスタム文字列を使用してページの複数のバージョンをキャッシュする