Compartir a través de


Almacenar en caché versiones de una página basada en encabezados HTTP

El atributo VaryByHeader y la propiedad HttpCachePolicy.VaryByHeaders de la directiva @ OutputCache permiten almacenar en caché múltiples versiones de una página, según el valor del encabezado HTTP que se especifique. Puede especificarse un solo encabezado, varios o todos los encabezados que pasen a la aplicación cuando se solicita la página. Dependiendo del encabezado o combinación de encabezados elegidos, se almacenarán en caché distintas versiones de la página solicitada.

Para almacenar en caché versiones de una página de forma declarativa según los valores de los encabezados HTTP

  1. Incluya una directiva @OutputCache con los atributos requeridos Duration y VaryByParam. El atributo Duration debe ser un valor entero mayor que cero. Si no desea emplear la funcionalidad que ofrece el atributo VaryByParam, debe establecer su valor como None.

  2. Incluya el atributo VaryByHeader en el cuerpo de la directiva @ OutputCache y establezca su valor como el nombre del encabezado HTTP que deba producir la variación del contenido de la caché. En el ejemplo siguiente se establece que deben almacenarse en caché múltiples versiones de una página basadas en el valor que se pase con el encabezado HTTP Accept-Language.

    <%@ OutputCache Duration="60" VaryByParam="None" VaryByHeader="Accept-Language" %>
    

    Nota   Si desea que el contenido de la caché varíe para encabezados diferentes, especifique una lista de nombres de encabezados delimitada por punto y coma. Si desea que el contenido de la caché varíe para todos los valores de los encabezados, establezca un asterisco (*) como valor del atributo VaryByHeader.

Para almacenar en caché versiones de una página mediante programación según un valor de encabezado HTTP

  1. En el bloque de declaración de código o en la clase de código subyacente de la página, utilice la sintaxis Response.Cache para establecer la caducidad y las directivas de visibilidad para el contenido de la página almacenado en la caché. Para ello puede utilizar los métodos HttpCachePolicy.SetExpires y HttpCachePolicy.SetCacheability, respectivamente.

  2. En el mismo código, especifique el nombre del encabezado como argumento para la propiedad VaryByHeaders y establezca true en esta propiedad. En el código siguiente se almacenan en caché múltiples versiones de una página cuando llegan al servidor solicitudes con valores distintos asignados al encabezado HTTP Accept-Language.

    Response.Cache.VaryByHeaders["Accept-Language"] = true;
    [Visual Basic]
    Response.Cache.VaryByHeaders("Accept-Language") = true
    

    **Nota   **Si desea que el contenido de la caché varíe para diversos valores de encabezado, establezca el argumento de la propiedad VaryByHeaders como una lista de encabezados HTTP válidos delimitada por punto y coma. Si desea que las páginas almacenadas en la caché varíen para todos los nombres de encabezado HTTP, utilice el método VaryByUnspecifiedParameters.

En el ejemplo siguiente se supone que el resultado de una página se ha almacenado en la caché mediante el código de alguno de los procedimientos presentados de este tema.

Llegan cuatro solicitudes de la página con los siguientes encabezados Accept-Language:

de-lu
en-us
fr
en-us

Como las solicitudes segunda y cuarta tiene el mismo valor de encabezado HTTP Accept-Language, sólo se almacena en caché la respuesta generada por la primera de ellas. Los otros dos valores de Accept-Language generan otras versiones de la página, que también se almacenan en caché. Para estas cuatro solicitudes se procesan y almacenan en caché un total de tres documentos. Las solicitudes sucesivas de la página que incluyan los mismos valores de Accept-Language se atenderán desde la caché de resultados hasta que las páginas almacenadas en caché caduquen. En este ejemplo se demuestra cómo almacenar en caché el resultado de una página con contenido para todo el mundo, basado en la configuración regional del explorador que la solicita.

Vea también

@ OutputCache | Almacenar en caché páginas de ASP.NET | HttpApplication.GetVaryByCustomString (Método) | VaryByParams | VaryByHeaders