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:
  • CacheControlCustom
  • CacheControlMaxAge
  • CacheControlNoCache
  • HttpExpires

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

  1. 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).
  2. No painel Conexões, acesse o site, o aplicativo ou o diretório para o qual você deseja desabilitar o cache.

  3. No painel Página Inicial, clique duas vezes em Cabeçalhos de Resposta HTTP.
    Screenshot that shows the Default Web Site Home pane, with H T T P Response Headers selected.

  4. Na página Cabeçalhos de Resposta HTTP, clique em Definir Cabeçalhos Comuns... no painel Ações.
    Screenshot that shows the H T T P Response Headers pane in the I I S Manager.

  5. 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.
    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.

Como desativar o cache para um site ou aplicativo

  1. 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).
  2. No painel Conexões, acesse o site, o aplicativo ou o diretório para o qual você deseja desabilitar o cache.

  3. No painel Página Inicial, clique duas vezes em Cabeçalhos de Resposta HTTP.
    Screenshot that shows the Default Web Site Home pane. H T T P Response Headers is selected.

  4. Na página Cabeçalhos de Resposta HTTP, clique em Definir Cabeçalhos Comuns... no painel Ações.
    Screenshot that shows the H T T P Response Headers pane.

  5. 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.
    Screenshot that shows the Set Common H T T P Response Headers dialog box. Immediately is selected under the Expire Web content checkbox.

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.
Valor Descrição
NoControl Não adiciona um cabeçalho Cache-Control ou Expires à resposta.

O valor numérico é 0.
DisableCache Adiciona um cabeçalho Cache-Control: no-cache à resposta.

O valor numérico é 1.
UseMaxAge Adiciona um cabeçalho Cache-Control: max-age=<nnn> à resposta com base no valor especificado no atributo CacheControlMaxAge.

O valor numérico é 2.
UseExpires Adiciona um cabeçalho Expires: <date> à resposta com base na data especificada no atributo httpExpires.

O valor numérico é 3.
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()