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:
|
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
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).
En el panel Conexiones, vaya al sitio, la aplicación o el directorio para el que desea deshabilitar el almacenamiento en caché.
En el panel Inicio, haga doble clic en Encabezados de respuesta HTTP.
En el panel Encabezados de respuesta HTTP, en el panel Acciones, haga clic en Establecer encabezados comunes....
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.
Cómo deshabilitar el almacenamiento en caché para un sitio web o aplicación
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).
En el panel Conexiones, vaya al sitio, la aplicación o el directorio para el que desea deshabilitar el almacenamiento en caché.
En el panel Inicio, haga doble clic en Encabezados de respuesta HTTP.
En el panel Encabezados de respuesta HTTP, en el panel Acciones, haga clic en Establecer encabezados comunes....
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.
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 .
|
||||||||||
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()