设置页的可缓存性

        页或用户控件的可缓存性定义可以在什么样的 HTTP 1.1 Internet 设备上缓存文档。这些设备包括发出请求的客户端,响应请求的 Web 服务器,以及请求或响应流中任何具有缓存功能的设备(例如代理服务器)。当 Web 服务器发送响应时,在它传递的所有信息中包括一个 Cache-Control HTTP 标头,该标头定义可在其上缓存文档的设备。ASP.NET 在 HttpCacheability 枚举中定义这些值。该枚举具有六个值,其中四个值直接映射为 Cache-Control HTTP 标头设置,另外两个特殊值分别为 HttpCacheability.ServerAndPrivateHttpCacheability.ServerAndNoCacheServerAndPrivate 只允许将响应缓存在原服务器和请求客户端上。而 ServerAndNoCache 只允许将响应缓存在原服务器上。

根据应用程序的需要,您可以选择定义哪些设备可以缓存特定的页,哪些设备不能缓存特定的页。例如,您可能希望用户登录页的可缓存性设置不同于显示产品选择的目录页。对于登录页,出于安全方面的考虑,您可能希望只将页缓存在服务器上,而目录页可以缓存在任何支持缓存的设备上。

通过将 Location 属性包括在 @ OutputCache 指令中并指定一个 OutputCacheLocation 枚举值,可以以声明方式设置页输出的可缓存性。

通过使用 HttpCachePolicy.SetCacheability 方法指定页的 HttpCacheability 值,您可以以编程方式设置页输出的可缓存性。通过 HttpResponse.Cache 属性可以访问该方法,而使用页的代码隐藏类或代码声明块中的 Response.Cache 语法可以访问该属性。

注意   如果使用 @ OutputCache 指令设置页的可缓存性,则您必须连同 Location 属性一起声明 DurationVaryByParam 属性。必须将 Duration 属性设置为大于零的值。如果您不想使用 VaryByParam 属性所提供的功能,则可以将其属性设置为 none。有关更多信息,请参见设置页缓存的到期时间缓存页的多个版本
相比之下,如果使用 HttpCachePolicy 类设置可缓存性,如果已建立了验证策略,则您不需要设置到期时间。

以声明方式设置页的可缓存性

  1. @ OutputCache 指令包括在 .aspx 文件中并定义必需的 DurationVaryByParam 属性。
  2. Location 属性包括在 @ OutputCache 指令中并将其值定义为受支持的值之一。这些值包括 AnyClientDownstreamServerNone
    注意   默认值为 Any。如果未定义 Location 属性,则可以将页输出缓存在与响应有关的所有具有缓存功能的网络应用程序上。其中包括请求客户端、原服务器、以及响应通过的任何代理服务器。

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

  • 在页的代码声明块或代码隐藏类文件中,使用 Response.Cache 语法来访问 HttpCachePolicy.SetCacheability 方法。下面的代码将 Cache-Control HTTP 标头设置为 Public
    [C#]
    Response.Cache.SetCacheability(HttpCacheability.Public);
    [Visual Basic]
    Response.Cache.SetCacheability(HttpCacheability.Public)
    注意   如果将可缓存性设置为 HttpCacheability.NoCacheHttpCacheability.ServerAndNoCache,则请求的客户端不会将页缓存在其“历史记录”文件夹中。例如,用户无论何时单击向后或向前按钮,都请求响应的新版本。通过将 HttpCachePolicy.SetAllowResponseInBrowserHistory 方法设置为 true,可以重写此行为。
    [C#]
    Response.Cache.SetAllowResponseInBrowserHistory(true);
    [Visual Basic]
    Response.Cache.SetAllowResponseInBrowserHistory(true)
    如果将可缓存性设置为 NoCacheServerAndNoCache 以外的其他任何值,则 ASP.NET 将忽略 SetAllowResponseInBrowserHistory 方法所设置的值。
原文地址:https://www.cnblogs.com/zsxfbj/p/140636.html