Caché del cliente<clientCache>

Información general

El elemento <clientCache> del elemento <staticContent> especifica los encabezados HTTP relacionados con la caché que IIS 7 y versiones posteriores envían a los clientes web, que controlan cómo los clientes web y los servidores proxy almacenarán en caché el contenido que IIS 7 y versiones posteriores devuelve.

Por ejemplo, el atributo httpExpires especifica una fecha y hora en que el contenido debe expirar e IIS 7 y versiones posteriores agregará un encabezado HTTP "Expires" a la respuesta. El valor del atributo httpExpires debe ser una fecha y hora con formato completo que siga la especificación en RFC 1123. Por ejemplo:

Vie, 01 Ene 2010 12:00:00 GMT

Nota:

Para usar el atributo httpExpires, debe establecer el valor del atributo cacheControlMode en UseExpires.

La especificación HTTP 1.1 de Solicitudes de comentarios (RFC) 2616 especifica varios valores posibles para el encabezado HTTP "Cache-Control", como "sin caché", "privado", "público", etc. Cada uno de estos valores de encabezado permite a los clientes web y servidores proxy conocer si se debe almacenar en caché el contenido:

  • El contenido que contiene un encabezado "sin caché" no debe ser almacenado en caché por ninguna entidad. - El contenido que contiene un encabezado "privado" no debe ser almacenado en caché por un servidor proxy, pero puede ser almacenado por un cliente. - El contenido que contiene un encabezado "público" puede ser almacenado por cualquier entidad.

    Nota:

    La lista anterior no es completa: hay muchos valores adicionales que se pueden especificar mediante el encabezado "Cache-Control".

Se pueden añadir directivas adicionales al encabezado HTTP "Cache-Control", como "max-age", que especifica la hora de expiración explícita para el contenido. En IIS 7, la directiva "max-age" se configura mediante el atributo cacheControlMaxAge. Aunque la configuración "Expires" y "max-age" son de alguna forma análogas, la directiva "max-age" tiene prioridad sobre "Expires".

Nota:

Para usar el atributo cacheControlMaxAge, debe establecer el valor del atributo cacheControlMode en UseMaxAge.

Para obtener más información acercad de los encabezados de almacenamiento en caché HTTP y los formatos de fecha y hora, consulte los siguientes artículos de Solicitudes de comentarios (RFC):

  • RFC 1123: "Requisitos para los hosts de Internet: aplicación y soporte técnico"
  • RFC 2616: "Protocolo de transferencia de hipertexto -- HTTP/1.1"

Compatibilidad

Versión Notas
IIS 10.0 El elemento <clientCache> no se modificó en IIS 10.0.
IIS 8.5 El elemento <clientCache> no se modificó en IIS 8.5.
8.0 IIS El atributo setEtag se agregó para especificar si el encabezado ETag HTTP se calcula y establece.
IIS 7.5 El elemento <clientCache> no se modificó en IIS 7.5.
IIS 7.0 El elemento <clientCache> del elemento <staticContent> se introdujo en IIS 7.0.
IIS 6,0 El elemento <clientCache> reemplaza las siguientes propiedades de la metabase de IIS 6.0:
  • CacheControlCustom
  • CacheControlMaxAge
  • CacheControlNoCache
  • HttpExpires

Configuración

El elemento <clientCache> del elemento <staticContent> se incluye en la instalación predeterminada de IIS 7 y versiones posteriores.

Procedimientos

Cómo configurar una fecha de expiración de caché para un sitio web o una aplicación

  1. Abra el Administrador de Internet Information Services (IIS):

    • Si usa Windows Server 2012 o Windows Server 2012 R2:

      • En la barra de tareas, haga clic en Administrador del servidor, en Herramientas y, posteriormente, en Administrador de Internet Information Services (IIS).
    • Si usa Windows 8 o Windows 8.1:

      • Mantenga presionada la tecla Windows, presione la letra X y haga clic en Panel de control.
      • En Panel de control, haga clic en Herramientas administrativas y, posteriormente, haga doble clic en Administrador de Internet Information Services (IIS).
    • Si usa Windows Server 2008 o Windows Server 2008 R2:

      • En la barra de tareas, haga clic en Inicio, seleccione Herramientas administrativas y, a continuación, haga clic en Administrador de Internet Information Services (IIS).
    • Si usa Windows Vista o Windows 7:

      • En la barra de tareas, haga clic en Inicio y, luego, haga clic en Panel de control.
      • Haga doble clic en Herramientas administrativas y, posteriormente, haga doble clic en Administrador de Internet Information Services (IIS).
  2. En el panel Conexiones, vaya al sitio, la aplicación o el directorio para el que desea deshabilitar el almacenamiento en caché.

  3. En el panel Inicio, haga doble clic en Encabezados de respuesta HTTP.
    Screenshot that shows the Default Web Site Home pane, with H T T P Response Headers selected.

  4. En el panel Encabezados de respuesta HTTP, en el panel Acciones, haga clic en Establecer encabezados comunes....
    Screenshot that shows the H T T P Response Headers pane in the I I S Manager.

  5. En el cuadro de diálogo Establecer encabezados de respuesta HTTP comunes, active la casilla para expirar contenido web, active la opción para expirar después de un intervalo específico o en un momento específico y, a continuación, haga clic en Aceptar.
    Screenshot that shows the Set Common H T T P Response Headers dialog box. Enable H T T P keep alive is selected.
    Screenshot that shows the Set Common H T T P Response Headers dialog box. After is selected under the Expire Web content checkbox.

Cómo deshabilitar el almacenamiento en caché para un sitio web o aplicación

  1. Abra el Administrador de Internet Information Services (IIS):

    • Si usa Windows Server 2012 o Windows Server 2012 R2:

      • En la barra de tareas, haga clic en Administrador del servidor, en Herramientas y, posteriormente, en Administrador de Internet Information Services (IIS).
    • Si usa Windows 8 o Windows 8.1:

      • Mantenga presionada la tecla Windows, presione la letra X y haga clic en Panel de control.
      • En Panel de control, haga clic en Herramientas administrativas y, posteriormente, haga doble clic en Administrador de Internet Information Services (IIS).
    • Si usa Windows Server 2008 o Windows Server 2008 R2:

      • En la barra de tareas, haga clic en Inicio, seleccione Herramientas administrativas y, a continuación, haga clic en Administrador de Internet Information Services (IIS).
    • Si usa Windows Vista o Windows 7:

      • En la barra de tareas, haga clic en Inicio y, luego, haga clic en Panel de control.
      • Haga doble clic en Herramientas administrativasy, a continuación, haga doble clic en Administrador de Internet Information Services (IIS).
  2. En el panel Conexiones, vaya al sitio, la aplicación o el directorio para el que desea deshabilitar el almacenamiento en caché.

  3. En el panel Inicio, haga doble clic en Encabezados de respuesta HTTP.
    Screenshot that shows the Default Web Site Home pane. H T T P Response Headers is selected.

  4. En el panel Encabezados de respuesta HTTP, en el panel Acciones, haga clic en Establecer encabezados comunes....
    Screenshot that shows the H T T P Response Headers pane.

  5. En el cuadro de diálogo Establecer encabezados de respuesta HTTP comunes, active la casilla para expirar contenido web, seleccione Inmediatamente y, a continuación, haga clic en Aceptar.
    Screenshot that shows the Set Common H T T P Response Headers dialog box. Immediately is selected under the Expire Web content checkbox.

Configuración

Atributos

Atributo Descripción
cacheControlCustom Atributo de cadena opcional.

Especifica las directivas de control de caché HTTP 1.1 personalizadas.
cacheControlMaxAge Atributo timeSpan opcional.

Especifica la antigüedad máxima (en segundos) del valor de control de la caché.

El valor predeterminado es 1.00:00:00 (1 día).
cacheControlMode Atributo enum opcional.

Especifica el modo en el que se va a usar para el almacenamiento en caché del cliente.

El atributo cacheControlMode puede ser uno de los siguientes valores posibles.

El valor predeterminado es NoControl.
Valor Descripción
NoControl No agregue un encabezado Cache-Control o Expires a la respuesta.

El valor numérico es 0.
DisableCache Agrega un encabezado Cache-Control: sin caché a la respuesta.

El valor numérico es 1.
UseMaxAge Agrega un encabezado Cache-Control: max-age=<nnn> a la respuesta en función del valor especificado en el atributo CacheControlMaxAge.

El valor numérico es 2.
UseExpires Agrega un encabezado Expires: <fecha> a la respuesta en función de la fecha especificada en el atributo httpExpires.

El valor numérico es 3.
httpExpires Atributo de cadena opcional.

Especifica la fecha y hora después de la cual una página almacenada en caché en el cliente se considera obsoleta. (La fecha y hora tienen el formato de acuerdo con la especificación de Solicitud de comentarios 1123.) El valor se devuelve al navegador web en el encabezado de archivo HTML. El agente de usuario compara el valor especificado con la fecha actual para determinar si se debe mostrar una página almacenada en caché o solicitud en una página actualizada desde el servidor.
setEtag Atributo Boolean opcional.

Especifica si el encabezado ETag HTTP es calculado y establecido. El encabezado ETag se usa para la validación de caché web y permite que un servidor web no tenga que enviar una respuesta completa si no se han realizado cambios en el contenido. setEtag se puede establecer en el Editor de configuración de la ruta de acceso system.webServer/staticContent.

El valor predeterminado es true.

Elementos secundarios

Ninguno.

Ejemplo de configuración

En el siguiente ejemplo de configuración se agrega un encabezado HTTP "Cache-Control: sin caché" a la respuesta, deshabilitando el almacenamiento en caché de las solicitudes.

<configuration>
   <system.webServer>
      <staticContent>
         <clientCache cacheControlMode="DisableCache" />
      </staticContent>
   </system.webServer>
</configuration>

El ejemplo de configuración siguiente agrega un encabezado HTTP "Expires: Tue, 19 ene 2038 03:14:07 GMT" a la respuesta, que configura las solicitudes para que expiren varios años desde ahora.

<configuration>
   <system.webServer>
      <staticContent>
         <clientCache cacheControlMode="UseExpires"
            httpExpires="Tue, 19 Jan 2038 03:14:07 GMT" />
      </staticContent>
   </system.webServer>
</configuration>

Código de ejemplo

En los ejemplos de código siguientes se agrega un encabezado HTTP "Cache-Control: sin caché" a la respuesta, deshabilitando el almacenamiento en caché de las solicitudes.

AppCmd.exe

appcmd.exe set config "Default Web Site" -section:system.webServer/staticContent /clientCache.cacheControlMode:"DisableCache"

C#

using System;
using System.Text;
using Microsoft.Web.Administration;

internal static class Sample
{
   private static void Main()
   {
      using(ServerManager serverManager = new ServerManager())
      { 
         Configuration config = serverManager.GetWebConfiguration("Default Web Site");
         ConfigurationSection staticContentSection = config.GetSection("system.webServer/staticContent");

         ConfigurationElement clientCacheElement = staticContentSection.GetChildElement("clientCache");
         clientCacheElement["cacheControlMode"] = @"DisableCache";

         serverManager.CommitChanges();
      }
   }
}

VB.NET

Imports System
Imports System.Text
Imports Microsoft.Web.Administration

Module Sample

   Sub Main()
      Dim serverManager As ServerManager = New ServerManager
      Dim config As Configuration = serverManager.GetWebConfiguration("Default Web Site")
      Dim staticContentSection As ConfigurationSection = config.GetSection("system.webServer/staticContent")

      Dim clientCacheElement As ConfigurationElement = staticContentSection.GetChildElement("clientCache")
      clientCacheElement("cacheControlMode") = "DisableCache"

      serverManager.CommitChanges()
   End Sub

End Module

JavaScript

var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST/Default Web Site";

var staticContentSection = adminManager.GetAdminSection("system.webServer/staticContent", "MACHINE/WEBROOT/APPHOST/Default Web Site");
var clientCacheElement = staticContentSection.ChildElements.Item("clientCache");
clientCacheElement.Properties.Item("cacheControlMode").Value = "DisableCache";

adminManager.CommitChanges();

VBScript

Set adminManager = WScript.CreateObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST/Default Web Site"

Set staticContentSection = adminManager.GetAdminSection("system.webServer/staticContent", "MACHINE/WEBROOT/APPHOST/Default Web Site")
Set clientCacheElement = staticContentSection.ChildElements.Item("clientCache")
clientCacheElement.Properties.Item("cacheControlMode").Value = "DisableCache"

adminManager.CommitChanges()

Los ejemplos de código siguientes agregan un encabezado HTTP "Expires: Tue, 19 ene 2038 03:14:07 GMT" a la respuesta, que configura las solicitudes para que expiren varios años desde ahora.

AppCmd.exe

appcmd.exe set config "Default Web Site" -section:system.webServer/staticContent /clientCache.cacheControlMode:"UseExpires"

appcmd.exe set config "Default Web Site" -section:system.webServer/staticContent /clientCache.httpExpires:"Tue, 19 Jan 2038 03:14:07 GMT"

C#

using System;
using System.Text;
using Microsoft.Web.Administration;

internal static class Sample
{
   private static void Main()
   {
      using(ServerManager serverManager = new ServerManager())
      { 
         Configuration config = serverManager.GetWebConfiguration("Default Web Site");
         ConfigurationSection staticContentSection = config.GetSection("system.webServer/staticContent");

         ConfigurationElement clientCacheElement = staticContentSection.GetChildElement("clientCache");
         clientCacheElement["cacheControlMode"] = @"UseExpires";
         clientCacheElement["httpExpires"] = @"Tue, 19 Jan 2038 03:14:07 GMT";

         serverManager.CommitChanges();
      }
   }
}

VB.NET

Imports System
Imports System.Text
Imports Microsoft.Web.Administration

Module Sample

   Sub Main()
      Dim serverManager As ServerManager = New ServerManager
      Dim config As Configuration = serverManager.GetWebConfiguration("Default Web Site")
      Dim staticContentSection As ConfigurationSection = config.GetSection("system.webServer/staticContent")

      Dim clientCacheElement As ConfigurationElement = staticContentSection.GetChildElement("clientCache")
      clientCacheElement("cacheControlMode") = "UseExpires"
      clientCacheElement("httpExpires") = "Tue, 19 Jan 2038 03:14:07 GMT"

      serverManager.CommitChanges()
   End Sub

End Module

JavaScript

var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST/Default Web Site";

var staticContentSection = adminManager.GetAdminSection("system.webServer/staticContent", "MACHINE/WEBROOT/APPHOST/Default Web Site");
var clientCacheElement = staticContentSection.ChildElements.Item("clientCache");
clientCacheElement.Properties.Item("cacheControlMode").Value = "UseExpires";
clientCacheElement.Properties.Item("httpExpires").Value = "Tue, 19 Jan 2038 03:14:07 GMT";

adminManager.CommitChanges();

VBScript

Set adminManager = WScript.CreateObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST/Default Web Site"

Set staticContentSection = adminManager.GetAdminSection("system.webServer/staticContent", "MACHINE/WEBROOT/APPHOST/Default Web Site")
Set clientCacheElement = staticContentSection.ChildElements.Item("clientCache")
clientCacheElement.Properties.Item("cacheControlMode").Value = "UseExpires"
clientCacheElement.Properties.Item("httpExpires").Value = "Tue, 19 Jan 2038 03:14:07 GMT"

adminManager.CommitChanges()