ProblemYou have a page with static content that you want to cache, but the page is rendered differently for some browsers. SolutionAdd the @ OutputCache directive to the .aspx file of each page you want to cache with the VaryByCustom attribute set to "browser": <%@ Page Language="VB" MasterPageFile="~/ASPNetCookbookVB.master" AutoEventWireup="false" CodeFile="CH16CacheByCustomStringVB.aspx.vb" Inherits="ASPNetCookbook.VBExamples.CH16CacheByCustomStringVB" Title="Cache By Custom String" %> <%@ OutputCache Duration="10" VaryByParam="none" VaryByCustom="browser" %> … DiscussionThe way in which a page is rendered often depends on the characteristics and version number of the browser making the request. ASP.NET handles most of this variation behind the scenes by sensing the browser type and its version and rendering the HTML and JavaScript in a suitable format. The variation in a rendered page from one browser type to another can cause problems if you implement caching as described in Recipe 16.1. For example, if a request is made for a page of this type by Internet Explorer 6.x, the page is rendered and stored in the cache. If a request for the same page is made by a Netscape 4.x browser before the cached copy expires, the Internet Explorer 6.x version will be sent to the browser. This generally results in a poorly displayed or improperly functioning page. ASP.NET provides the ability to cache browser-specific versions of the rendered page by setting the VaryByCustom attribute of the OutputCache element to "browser". When VaryByCustom is set to "browser", ASP.NET will check the browser name and major version of the browser making the page request (e.g., 4.x, 5.x, 6.x, etc.) to see if a copy of the rendered page is stored in the cache that matches them. If so, the cached version will be sent as the response. Otherwise, the page will be rendered as usual, stored in the cache, and delivered to the browser. The only VaryByCustom attribute value that ASP.NET provides built-in support for is "browser"; however, with additional coding, this attribute can be used to control the caching of a page by any variation you choose. Recipe 16.4 provides an example of using the VaryByCustom attribute to cache a page based on the browser type and full version number.
See AlsoRecipes 16.1 and 16.4 |