Publicidade

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Leonardo Rauta

[Resolvido] Problema com cache no IE usando javascript

Patrocínio:

Estou com um problema de cache na minha aplicação.

 

Minha aplicação é constituída por um html (index.html), o qual chama vários arquivos javascript para desenhar as janelas e fazer toda a parte lógica das janelas.

 

Ao iniciar a aplicação a janela faz uma requisição para um servidor fastCGI para verificar quais as opções de acesso que o usuário possui. Depois que o usuário selecionar determinada ação, a página envia outra requisição ao servidor e é recarregada para apresentar os novos menu ao usuário, no Firefox isso funciona corretamente. Porém, no IE a resposta do servidor é sempre a mesma (apenas para o IE), mas se eu limpar o cache a resposta é alterada.

 

Não é problema no servidor pois em outros navegadores funciona corretamente. Tudo leva a entender que o problema seja no armazenamento de cache feito pelo IE, inclusive por depois de limpar o cache, funcionar corretamente.

 

Existe algum modo de limpar o cache do IE? Utilizando alguma função javascript?

 

Já tentei utilizar as meta tags:

 

<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="-1">
<META HTTP-EQUIV="Cache-control" CONTENT="no-store">

Já tentei enviar sempre uma requisição ao servidor com um número aleatório ou com a data, para evitar o cache mas não foi bem sucedido, já fiz o servidor responder sempre a data, mas a data recebida pelo IE não era alterada. Outra opção que eu tinha era carregar as páginas com um parâmetro aleatório, também para evitar a página entrar em cache. Porém, todas as tentativas sem sucesso.

 

Alguém já passou por esse problema, sabe como resolver ou tem mais idéias para limpar o cache utilizando o javascript?

0

Compartilhar este post


Link para o post
Compartilhar em outros sites

Existe algum modo de limpar o cache do IE? Utilizando alguma função javascript?

não existe, isso é impossível.

 

 

Já tentei enviar sempre uma requisição ao servidor com um número aleatório ou com a data, para evitar o cache mas não foi bem sucedido, já fiz o servidor responder sempre a data, mas a data recebida pelo IE não era alterada. Outra opção que eu tinha era carregar as páginas com um parâmetro aleatório, também para evitar a página entrar em cache. Porém, todas as tentativas sem sucesso.

foram exatamente essas alternativas que imaginei.

 

 

limpar o cache utilizando o javascript?

isso é impossível. Temos que partir para outra solução.

 

 

A própria requisição em si pode estar entrando no cache.

Se fosse para um arquivo php, eu enviaria um header para evitar cache, assim:

<?php
//Evitando cache de arquivo
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last Modified: '. gmdate('D, d M Y H:i:s') .' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
header('Pragma: no-cache');
header('Expires: 0');

existe algo parecido para você fazer no teu CGI ?

0

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para evitar que a própria requisição estivesse em cache eu implementei do lado do servidor e do cliente um token com a data e também com um número aleatório, sendo assim a requisição sempre seria atualizada, seria sempre uma requisição diferente.

Mas eu creio que a requisição esteja entrando em cache também pois mesmo com o token implementado a resposta (apenas no IE) era sempre a mesma, mesmo a 'pergunta' sendo diferente. Porém, apenas essa requisição apresenta esse comportamento, outras requisições feitas posteriores a essa não apresentam nenhum tipo de problema, principalmente problemas possivelmente ocasionado por cache.

 

O problema de utilizar um header php é que na aplicação não temos um servidor php.

0

Compartilhar este post


Link para o post
Compartilhar em outros sites

ok, mas então qual linguagem você está usando ?

 

veja se essa linguagem oferece headers semelhantes aos que sugeri.

0

Compartilhar este post


Link para o post
Compartilhar em outros sites

William, meu servidor é todo em C e minhas páginas são todas em javascript (com ExtJS).

0

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok, então você deve enviar os headers para evitar cache, com a linguagem C.

0

Compartilhar este post


Link para o post
Compartilhar em outros sites

Depois de muita procura encontrei uma solução.

Para quem tiver com um problema similar, encontrei o meu problema.

O problema estava nas requisições do tipo "GET", elas ficavam armazenadas em cache pelo IE. Para resolver isso foi utilizado as seguintes linhas de código:

 

var request = new XMLHttpRequest();
request.open("GET",pagina, false);
request.send(null);
if(!request.getResponseHeader("Date")) {
  var cached = request;
  request = new XMLHttpRequest();
  var ifModifiedSince =
    cached.getResponseHeader("Last-Modified") ||
    new Date(0); // January 1, 1970
  request.open("GET",pagina, false);
  request.setRequestHeader("If-Modified-Since", ifModifiedSince);
  request.send("");
  if(request.status == 304) {
    request = cached;
  }
}

 

Utilizando isso eu consegui limpar o cache a cada requisição feita ao servidor.

0

Compartilhar este post


Link para o post
Compartilhar em outros sites