Publicidade

Entre para seguir isso  
Seguidores 0
Leonardo Rauta

[Resolvido] Problema com cache no IE usando javascript

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

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!


Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.


Entrar Agora
Entre para seguir isso  
Seguidores 0

  • Próximos Eventos

    • 0
      22 fevereiro 2017 22:00
      Até
      23 fevereiro 2017 01:30