Compartilhar via


Como evitar o cache no 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 no Internet Explorer.

Versão original do produto: Internet Explorer
Número original do KB: 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 Active Server Pages (ASP):

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

Expiração e o cabeçalho Expires

É altamente recomendável que todos os servidores Web usem um esquema para a expiração de todas as páginas da Web. É uma prática ruim para um servidor Web não fornecer informações de expiração por meio do cabeçalho de resposta HTTP Expires 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 pela rede.

Sempre use o cabeçalho Expires para especificar o tempo mais razoável quando um determinado arquivo no servidor precisa ser atualizado pelo cliente. Quando as páginas são atualizadas regularmente, o próximo período de atualização é a resposta mais eficiente. Tomemos, 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.

As 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 que estão sujeitas a alterações imediatas. Essas páginas devem ser marcadas pelo servidor com um valor de "-1" para o cabeçalho Expires. Em solicitações futuras do usuário, o Internet Explorer geralmente entra em contato com o servidor Web para obter atualizações dessa 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 VOLTAR e AVANÇAR são usados para acessar o histórico de navegação.
  • quando o navegador está no modo offline.

O cabeçalho Cache-Control

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

As páginas mantidas fora do cache não podem ser acessadas até que o navegador possa entrar em contato novamente com o servidor Web. Portanto, os servidores devem usar o cabeçalho Cache-Control com moderação. Na maioria dos casos, o uso de Expires: -1 é preferível.

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 com versões anteriores de servidores HTTP 1.0, o Internet Explorer oferece suporte a um uso especial do cabeçalho HTTP Pragma: no-cache. Se o cliente se comunicar com o servidor por meio de uma conexão segura (https://) e o servidor retornar um cabeçalho Pragma: no-cache com a resposta, o Internet Explorer não armazenará a resposta em cache.

No entanto, o cabeçalho Pragma: no-cache não foi para esse propósito. 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 de 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.

Tags META HTTP-EQUIV

As páginas HTML permitem uma forma HTTP-EQUIV especial da tag META que especifica cabeçalhos HTTP específicos de dentro do documento HTML. Aqui está um pequeno exemplo de página HTML que usa Pragma: no-cache e Expires: -1:

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

Pragma: no-cache impede o cache apenas quando usado em uma conexão segura. Uma tag META Pragma: no-cache é tratada de forma idêntica a Expires: -1 se usada em uma página não segura. A página será armazenada em cache, mas marcada como expirada imediatamente.

As marcas META HTTP-EQUIV de controle de cache são ignoradas e não têm efeito nas versões 4 ou 5 do Internet Explorer. Para usar o Cache-Control, 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 preferível às tags META. As tags META normalmente devem aparecer na parte superior da seção HTML HEAD. E há pelo menos um problema conhecido com a tag Pragma HTTP-EQUIV META.

Opções do servidor para armazenamento em cache

Quando o cabeçalho Cache-Control precisa ser usado em páginas não ASP, pode ser 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. Encontre o diretório que contém o conteúdo que precisa do cabeçalho Cache-Control.
  3. Abra a caixa de diálogo Propriedades desse 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 no-cache para o valor do cabeçalho.

Não é uma boa idéia 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 deste artigo e ainda está tendo problemas com o cache e o Internet Explorer, 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 no Internet Explorer.
  • Você está usando o 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 novamente se o servidor Web tem o HTTP 1.1 ativado e está retornando respostas HTTP 1.1 para o Internet Explorer? Os cabeçalhos Cache-Control 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, particularmente sobre a terminação CRLF de cabeçalhos HTTP? No interesse do desempenho, o Internet Explorer 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 estão escritos corretamente?

Confira também