Cache de cliente <clientCache>
Visão geral
O elemento <clientCache>
do elemento <staticContent>
especifica cabeçalhos HTTP relacionados ao cache que o IIS 7 e posterior enviam a clientes Web, que controlam como os clientes Web e servidores proxy armazenarão em cache o conteúdo que o IIS 7 e posterior retornam.
Por exemplo, o atributo httpExpires especifica uma data e hora em que o conteúdo deve expirar, e o IIS 7 e posterior adicionarão um cabeçalho HTTP “Expires” à resposta. O valor do atributo httpExpires deve ser uma data e hora totalmente formatadas que siga a especificação na RFC 1123. Por exemplo:
Fri, 01 Jan 2010 12:00:00 GMT
Observação
Para usar o atributo httpExpires, você precisa definir o valor do atributo cacheControlMode como UseExpires.
A especificação HTTP 1.1 em Solicitação de Comentários (RFC) 2616 especifica vários valores possíveis para o cabeçalho HTTP “Cache-Control”, como “no-cache”, “private”, “public” etc. Cada um desses valores de cabeçalho permite que clientes Web e servidores proxy saibam se devem armazenar o conteúdo em cache:
O conteúdo que contém um cabeçalho “no-cache” não deve ser armazenado em cache por nenhuma entidade. – O conteúdo que contém um cabeçalho “private” não deve ser armazenado em cache por um servidor proxy, mas pode ser armazenado em cache por um cliente Web. – O conteúdo que contém um cabeçalho “public” pode ser armazenado em cache por qualquer entidade.
Observação
A lista acima não é abrangente– há muitos valores adicionais que podem ser especificados pelo cabeçalho “Cache-Control”.
Diretivas adicionais podem ser adicionadas ao cabeçalho HTTP “Cache-Control”, como “max-age”, que especifica o tempo de expiração explícito para o conteúdo. No IIS 7, a diretiva “max-age” é configurada por meio do atributo cacheControlMaxAge. Embora as configurações “Expires” e “max-age” sejam um pouco análogas, a diretiva “max-age” tem prioridade sobre “Expira”.
Observação
Para usar o atributo cacheControlMaxAge, você precisa definir o valor do atributo cacheControlMode como UseMaxAge.
Para obter mais informações sobre cabeçalhos de cache HTTP e formatos de data/hora, consulte os seguintes artigos de solicitação de comentários (RFC):
- RFC 1123 – “Requisitos para hosts de Internet -- Aplicação e suporte”
- RFC 2616 – “Hypertext Transfer Protocol -- HTTP/1.1”
Compatibilidade
Versão | Observações |
---|---|
IIS 10.0 | O elemento <clientCache> não foi modificado no IIS 10.0. |
IIS 8.5 | O elemento <clientCache> não foi modificado no IIS 8.5. |
IIS 8.0 | O atributo setEtag foi adicionado para especificar se o cabeçalho HTTP ETag é calculado e definido. |
IIS 7.5 | O elemento <clientCache> não foi modificado no IIS 7.5. |
IIS 7.0 | O elemento <clientCache> do elemento <staticContent> foi introduzido no IIS 7.0. |
IIS 6,0 | O elemento <clientCache> substitui as seguintes propriedades de metabase dos IIS 6.0:
|
Instalação
O elemento <clientCache>
do elemento <staticContent>
está incluído na instalação padrão do IIS 7 e versões posteriores.
Instruções
Como configurar uma data de expiração de cache para um site ou aplicativo
Abra o Gerenciador dos Serviços de Informações da Internet (IIS):
Caso você esteja usando o Windows Server 2012 ou o Windows Server 2012 R2:
- Na barra de tarefas, clique em Gerenciador do Servidor, em Ferramentas e em Gerenciador dos Serviços de Informações da Internet (IIS).
Se você estiver usando o Windows 8 ou Windows 8.1:
- Mantenha pressionada a tecla Windows, pressione a letra X e clique em Painel de Controle.
- Clique em Ferramentas Administrativas e clique duas vezes em Gerenciador dos Serviços de Informações da Internet (IIS).
Caso você esteja usando o Windows Server 2008 ou o Windows Server 2008 R2:
- Na barra de tarefas, clique em Iniciar, vá para Ferramentas Administrativas e clique em Gerenciador dos Serviços de Informações da Internet (IIS).
Se você estiver usando o Windows Vista ou Windows 7:
- Na barra de tarefas, clique em Iniciar e, depois, em Painel de Controle.
- Clique duas vezes em Ferramentas Administrativas e clique duas vezes em Gerenciador dos Serviços de Informações da Internet (IIS).
No painel Conexões, acesse o site, o aplicativo ou o diretório para o qual você deseja desabilitar o cache.
No painel Página Inicial, clique duas vezes em Cabeçalhos de Resposta HTTP.
Na página Cabeçalhos de Resposta HTTP, clique em Definir Cabeçalhos Comuns... no painel Ações.
Na caixa de diálogo Definir Cabeçalhos comuns de resposta HTTP, marque a caixa para expirar o conteúdo da Web, selecione a opção para expirar após um intervalo específico ou em um horário específico e clique em OK.
Como desativar o cache para um site ou aplicativo
Abra o Gerenciador dos Serviços de Informações da Internet (IIS):
Caso você esteja usando o Windows Server 2012 ou o Windows Server 2012 R2:
- Na barra de tarefas, clique em Gerenciador do Servidor, em Ferramentas e em Gerenciador dos Serviços de Informações da Internet (IIS).
Se você estiver usando o Windows 8 ou Windows 8.1:
- Mantenha pressionada a tecla Windows, pressione a letra X e clique em Painel de Controle.
- Clique em Ferramentas Administrativas e clique duas vezes em Gerenciador dos Serviços de Informações da Internet (IIS).
Caso você esteja usando o Windows Server 2008 ou o Windows Server 2008 R2:
- Na barra de tarefas, clique em Iniciar, vá para Ferramentas Administrativas e clique em Gerenciador dos Serviços de Informações da Internet (IIS).
Se você estiver usando o Windows Vista ou Windows 7:
- Na barra de tarefas, clique em Iniciar e, depois, em Painel de Controle.
- Clique duas vezes em Ferramentas Administrativas e clique duas vezes em Gerenciador dos Serviços de Informações da Internet (IIS).
No painel Conexões, acesse o site, o aplicativo ou o diretório para o qual você deseja desabilitar o cache.
No painel Página Inicial, clique duas vezes em Cabeçalhos de Resposta HTTP.
Na página Cabeçalhos de Resposta HTTP, clique em Definir Cabeçalhos Comuns... no painel Ações.
Na caixa de diálogo Definir Cabeçalhos comuns de resposta HTTP, marque a caixa para expirar o conteúdo da Web, selecione Imediatamentee clique em OK.
Configuração
Atributos
Atributo | Descrição | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
cacheControlCustom |
Atributo de cadeia de caracteres opcional. Especifica diretivas de controle de cache HTTP 1.1 personalizadas. |
||||||||||
cacheControlMaxAge |
Atributo timeSpan opcional. Especifica o tempo decorrido máximo (em segundos) do valor de controle de cache. O valor padrão é 1.00:00:00 (1 dia). |
||||||||||
cacheControlMode |
Atributo de enumeração opcional. Especifica o modo a ser usado para o cache do cliente. O atributo cacheControlMode pode ser um dos valores possíveis a seguir. O padrão é NoControl .
|
||||||||||
httpExpires |
Atributo de cadeia de caracteres opcional. Especifica a data e a hora após as quais uma página armazenada em cache no cliente é considerada obsoleta. (A data e a hora são formatadas de acordo com a especificação na Solicitação para Comentários 1123.) O valor é retornado para o navegador no cabeçalho do arquivo HTML. O agente do usuário compara o valor fornecido com a data atual para determinar se deseja exibir uma página armazenada em cache ou solicitar uma página atualizada do servidor. |
||||||||||
setEtag |
Atributo booliano opcional. Especifica se o cabeçalho HTTP ETag é calculado e definido. O cabeçalho ETag é usado para validação de cache da Web e permite que um servidor Web não precise enviar uma resposta completa se nenhuma alteração tiver sido feita no conteúdo. setEtag pode ser definido no Editor de Configuração no caminho system.webServer/staticContent .O valor padrão é true . |
Elementos filho
Nenhum.
Exemplo de configuração
O exemplo de configuração a seguir adiciona um cabeçalho HTTP “Cache-Control: no-cache” à resposta, desabilitando assim o cache de solicitações.
<configuration>
<system.webServer>
<staticContent>
<clientCache cacheControlMode="DisableCache" />
</staticContent>
</system.webServer>
</configuration>
O exemplo de configuração a seguir adiciona um cabeçalho HTTP “Expires: Tue, 19 Jan 2038 03:14:07 GMT” à resposta, que configura solicitações para expirar daqui a vários anos.
<configuration>
<system.webServer>
<staticContent>
<clientCache cacheControlMode="UseExpires"
httpExpires="Tue, 19 Jan 2038 03:14:07 GMT" />
</staticContent>
</system.webServer>
</configuration>
Exemplo de código
Os exemplos de código a seguir adicionam um cabeçalho HTTP “Cache-Control: no-cache” à resposta, desabilitando assim o cache de solicitações.
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()
Os exemplos de código a seguir adicionam um cabeçalho HTTP “Expires: Tue, 19 Jan 2038 03:14:07 GMT” à resposta, que configura solicitações para expirar daqui a vários anos.
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()