Como impedir o cache na Internet Explorer

Aviso

O aplicativo da área de trabalho desativado e sem suporte do Internet Explorer 11 está programado para ser desativado permanentemente por meio de uma atualização do Microsoft Edge em certas versões do Windows 10. Para obter mais informações, consulte Perguntas frequentes sobre a desativação do aplicativo de área de trabalho do Internet Explorer 11.

Este artigo descreve o uso de cabeçalhos HTTP para controlar o cache de páginas da Web na Internet Explorer.

Versão original do produto: Internet Explorer
Número de KB original: 234067

Resumo

Você pode usar o Microsoft Internet Information Server (IIS) para marcar facilmente páginas altamente voláteis ou confidenciais usando o seguinte script no início extremo das páginas específicas do ASP (Active Server Pages):

<% Response.CacheControl = "no-cache" %>
<% Response.AddHeader "Pragma", "no-cache" %>
<% Response.Expires = -1 %>

Expiração e o cabeçalho Expira

É altamente recomendável que todos os servidores Web usem um esquema para a expiração de todas as páginas da Web. É uma má prática para um servidor Web não fornecer informações de expiração por meio do cabeçalho de resposta HTTP Expira para cada recurso retornado aos clientes solicitantes. A maioria dos navegadores e proxies intermediários hoje respeita essas informações de expiração e as usa para aumentar a eficiência das comunicações na rede.

Use sempre o cabeçalho Expires para especificar a hora mais razoável em que um arquivo específico no servidor precisa ser atualizado pelo cliente. Quando as páginas são atualizadas regularmente, o próximo período para atualização é a resposta mais eficiente. Veja, por exemplo, uma página de notícias diárias na Internet que é atualizada todos os dias às 5 da manhã. O servidor Web para esta página de notícias deve retornar um cabeçalho Expires com um valor para 5 da manhã do dia seguinte. Quando terminar, o navegador não precisará entrar em contato com o servidor Web novamente até que a página seja alterada.

Páginas que não devem ser alteradas devem ser marcadas com uma data de validade de aproximadamente um ano.

Em muitos casos, os servidores Web têm uma ou mais páginas voláteis em um servidor que contêm informações sujeitas a alterações imediatamente. Essas páginas devem ser marcadas pelo servidor com um valor de "-1" para o cabeçalho Expira. Em solicitações futuras do usuário, a Internet Explorer geralmente entra em contato com o servidor Web para obter atualizações nessa página por meio de uma solicitação condicional If-Modified-Since. No entanto, a página permanece no cache de disco (Arquivos temporários da Internet). E a página é usada em situações apropriadas sem entrar em contato com o servidor Web remoto, como:

  • quando os botões BACK e FORWARD são usados para acessar o histórico de navegação.
  • quando o navegador estiver no modo offline.

O cabeçalho Cache-Control

Algumas páginas, no entanto, são tão voláteis ou sensíveis que não exigem cache de disco. Para isso, o Explorer da Internet dá suporte ao cabeçalho http 1.1 Cache-Control. Esse cabeçalho impede todo o cache de um determinado recurso Web quando o valor sem cache é especificado por um servidor HTTP 1.1.

As páginas mantidas fora do cache não estarão acessíveis até que o navegador possa reconiciar o servidor Web. Portanto, os servidores devem usar o cabeçalho Cache-Control com moderação. Na maioria dos casos, o uso de Expira: -1 é preferencial.

O cabeçalho Pragma: No-Cache

Infelizmente, os servidores HTTP 1.0 herdados não podem usar o cabeçalho Cache-Control. Para fins de compatibilidade anterior com servidores HTTP 1.0, o Explorer da Internet dá suporte a um uso especial do cabeçalho HTTP Pragma: sem cache. Se o cliente se comunicar com o servidor por meio de uma conexão segura (https://) e o servidor retornar um Pragma: cabeçalho sem cache com a resposta, a Internet Explorer não armazenará em cache a resposta.

No entanto, o cabeçalho Pragma: sem cache não era para essa finalidade. De acordo com as especificações HTTP 1.0 e 1.1, esse cabeçalho é definido apenas no contexto de uma solicitação, não em uma resposta. Destina-se a servidores proxy que podem impedir que determinadas solicitações importantes cheguem ao servidor Web de destino. Para aplicativos futuros, o cabeçalho Cache-Control é o meio adequado para controlar o cache.

Marcas META HTTP-EQUIV

As páginas HTML permitem um formulário HTTP-EQUIV especial da marca META que especifica cabeçalhos HTTP específicos de dentro do documento HTML. Aqui está uma página HTML de exemplo curto que usa o Pragma: sem cache e Expira: -1:

<HTML>
    <HEAD>
        <META HTTP-EQUIV="Pragma" CONTENT="no-cache">
        <META HTTP-EQUIV="Expires" CONTENT="-1">
    </HEAD>
<BODY>
</BODY>
</HTML>

Pragma: o não cache impede o cache somente quando usado em uma conexão segura. Um Pragma: a marca META sem cache é tratada de forma idêntica a Expira: -1 se usada em uma página não segura. A página será armazenada em cache, mas marcada como expirada imediatamente.

Cache-Control marcas META HTTP-EQUIV são ignoradas e não têm efeito nas versões 4 ou 5 do Explorer da Internet. Para usar o Controle de Cache, esse cabeçalho deve ser especificado usando cabeçalhos HTTP, conforme descrito na seção Cache-Control acima.

Observação

O uso de cabeçalhos HTTP padrão é muito preferencial em relação às marcas META. As marcas META normalmente devem aparecer na parte superior da seção html HEAD. E há pelo menos um problema conhecido com a marca META HTTP-EQUIV do Pragma.

Opções de servidor para cache

Quando o cabeçalho Cache-Control precisar ser usado em páginas não ASP, talvez seja necessário usar opções na configuração do servidor para adicionar esse cabeçalho automaticamente. Para o processo de adição de cabeçalhos HTTP às respostas do servidor para um diretório específico, consulte o documento do servidor. Por exemplo, no IIS 4, siga estas etapas:

  1. Inicie o Gerenciador do IIS.
  2. Na árvore de computadores e serviços, abra o Servidor Web Padrão ou o servidor Web em questão. Localize o diretório que contém o conteúdo que precisa do cabeçalho Cache-Control.
  3. Abra a caixa de diálogo Propriedades para esse diretório.
  4. Selecione a guia Cabeçalhos HTTP .
  5. Selecione o botão Adicionar no grupo Cabeçalhos HTTP Personalizados e adicione Cache-Control para o nome do cabeçalho e não cache para o valor do cabeçalho.

Não é uma boa ideia usar esse cabeçalho globalmente em todo o servidor Web. Restrinja seu uso puramente ao conteúdo que absolutamente não deve ser armazenado em cache no cliente.

Lista de verificação de problemas

Se você aplicou as técnicas neste artigo e ainda está tendo problemas com cache e Explorer da Internet, examine esta lista de verificação útil passo a passo antes de entrar em contato com a Microsoft para obter assistência de suporte técnico:

  • Você está usando o cabeçalho Cache-Control com a propriedade ASP Response.CacheControl ou por meio de um cabeçalho HTTP retornado? É a única maneira de realmente impedir o cache na Internet Explorer.
  • Você está usando a Internet Explorer 4.01 Service Pack 2 ou superior? Não há como impedir completamente o cache em versões anteriores do navegador.
  • Você verificou duas vezes que seu servidor Web tem o HTTP 1.1 ativado e está retornando respostas HTTP 1.1 ao Explorer da Internet? Cache-Control cabeçalhos são inválidos em respostas HTTP 1.0.
  • Se você estiver usando CGI/ISAPI/Servlets no lado do servidor, você está seguindo exatamente a especificação HTTP 1.1, especialmente sobre o término do CRLF de cabeçalhos HTTP? No interesse do desempenho, o Explorer da Internet normalmente não perdoa respostas que violam a especificação HTTP 1.1. Geralmente, resulta em cabeçalhos ignorados ou relatórios de erros inesperados do servidor.
  • Os cabeçalhos HTTP são escritos corretamente?

Confira também