如何:使用 HTTP 标头对某页的各个版本进行缓存

更新:2007 年 11 月

使用 ASP.NET,您可以根据指定的 HTTP 标头的值对某页的多个版本进行缓存。当请求页时,您可以指定按传递到应用程序的单个标头、多个标头或所有标头进行缓存。

根据 HTTP 标头值以声明方式对某页的各个版本进行缓存

  1. 在 ASP.NET 页中,在 @ OutputCache 指令中包括必需的 DurationVaryByParamVaryByControl 属性。必须将 Duration 属性设置为大于零的整数。如果希望只按 HTTP 标头值进行缓存,则必须将 VaryByParam 属性设置为“None”。

  2. @ OutputCache 指令中,包含 VaryByHeader 属性,将其值设置为要作为改变缓存内容的依据的 HTTP 标头的名称。

    下面的示例将页缓存 60 秒,并根据随 Accept-Language HTTP 标头传递的值设置要缓存的页的版本:

    <%@ OutputCache Duration="60" VaryByParam="None" VaryByHeader="Accept-Language" %>
    
    a6s4ks5w.alert_note(zh-cn,VS.90).gif说明:

    如果要根据多个标头改变缓存的内容,请以分号 (;) 作为分隔符包括标头名称的列表。如果要根据所有标头值改变缓存的内容,请将 VaryByHeader 属性设置为星号 (*)。

根据 HTTP 标头值以编程方式对某页的各个版本进行缓存

  1. 在页的 Page_Load 方法中,对页的 Response 对象的 Cache 属性调用 SetCacheabilitySetExpires 方法。

  2. VaryByHeaders 属性中的 HTTP 标头值设置为 true。

    下面的代码示例演示如何为有不同的 Accept-Language HTTP 标头值的请求,将某页的多个版本缓存一分钟之久。

    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
    
    a6s4ks5w.alert_note(zh-cn,VS.90).gif说明:

    如果要根据多个标头改变缓存的内容,需要在 VaryByHeaders 属性中设置多个值。如果要根据所有标头改变缓存的内容,请将 VaryByHeaders["VaryByUnspecifiedParameters"] 设置为 true。

请参见

任务

如何:以声明方式设置 ASP.NET 页的可缓存性

如何:以编程方式设置页的可缓存性

如何:使用请求浏览器缓存页的各个版本

如何:使用参数对页的各个版本进行缓存

如何:使用自定义字符串对页的各个版本进行缓存

概念

缓存 ASP.NET 页

设置页的可缓存性

缓存页的多个版本