Resolvendo o problema do Cache

Novo aqui no site? Talvez gostaria de assinar o
RSS feed do site?

Publicado em: 30/10/2007
Área: Ajax
Visualizações: 4.439
Comentário(s): 7

imprimir envie por e-mail compartilhe
Quando estamos desenvolvendo para web, principalmente em AJAX, paraece que nossa aplicação parou de funcionar e fica repetindo a mesma resposta para nossas solicitções, mesmo quando essas solicitções passam parâmetros diferentes.
Esse problema não ocorre somente em AJAX, aplicações clássicas também sofrem com esse transtorno.
Primeiramente, o que cache?
Para tornar a web mais responsiva e rápida os desenvolvedores implemetaram cache em diversoso níveis, o mais comum deles e o cache em disco, realizado pelo navagdor.
Quando um página é requisiatada o navegador procura em seu histórico, para ver se há alguma página com a mesma URL, caso encontre, o navegador não requisita uma nova página, ao invés disso e pega a página do cache e a exibe diretamente, sem que ela seja reprocessada pelo navegador.Bom isto ajuda em MUITO, quando se trata de páginas que custem a serem atualizadas ou possuam muitas imagens.Mas se tratando de páginas dinâmicas, isso pode ser uma dor de cabeça para os desenvolvedores.
Em AJAX, geralmente nossa aplicação tem uma taxa de atualização muito alta, e o cache passa a ser o nosso inimigo número 1, pois nem sempre teremos acesso a todas as atualizações disponíveis.
Antes mesmo de se pensar em AJAX, medidas para evitar que aplicaçoes ficassem "presas" no cache foram tomadas.Foram criadas META-TAGS de cabeçalho para informar ao naveagdor ou ao proxy que a página não deveria ser armazenada.
<meta http-equiv="cache-control"   content="no-cache" />
Esta tag informa se a págian pode ou não ser armazenada.Possui quatro valores possíveis:
  - Public : a página pode ser armazenada e é de uso público(todos tem acesso ao cache)
  - Private:a página pode ser armazenada e é de uso privado(somente o usário que requisitou a página pode acessar o cache)
  - No-Cache: A página não é armazenada em Cache
  - No-Store: É feito um cache temporário, a página não é arquivada.

Estas meta-tags pertencem ao somenete ao protocolo HTTP1.1 e não são respeitadas por todos os navegadores(especialmente por aquele azulzinho).
Para obter maior compatibilidade, você pode usar uma outra meta-tag junto com essas.
<meta http-equiv="pragma" content="no-cache" />
Além, disso você pode informar com que frequência a sua página é atualizada, assim o cache possui´ra uma data de expiração.
<meta http-equiv="expires" content = "-1" />
Com esta meta-tag, você pode informar quantos minutos a página levará em média para expirar, sendo que zero siginifica AGORA, ou seja o navegador sempre deve procurar por uma nova versão da página no servidor.Por questões de compatiblidade, algumas pessoas colocam "-1" com valor, também funciona.
Outro valor possível é uma data válida, assim o navegar sebrá a data exata de expiração da página.
<meta http-equiv="expires" content = "Mon, 22 jul 2006 11:12:01 GMT" />

Por fim você pode controlar o cache de páginas através de scripts de servidor com ASP ou PHP, ou até mesmo CGI.
Alguns exemplos:
<?php
// Data no passado
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");

// Sempre modificado
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");

// HTTP/1.1
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);

// HTTP/1.0
header("Pragma: no-cache");
?>


  
'HTTP/1.1
Response.CacheControl = "no-cache"
Response.AddHeader "cache-control","no-cache"
'HTTP/1.0
Response.AddHeader "Pragma", "no-cache"
Response.Expires = -1 ' minutos até a expiração
Response.Expiresabsolute = Now() ' data de expiração


Até a próxima

Preencha o formulário para comentar:
Nome:*

E-mail:* (não será exibido)

Site: (http://)

Comentário:*

Deseja receber os comentários no e-mail?

Anti-spam: (nova imagem)





Flávio

   - Publicado em: 14/05/2008 - 16:03

Usei esse metodo para qdo clicar no voltar os dados do login não estivessem mais lá

 

Ramon

   - Publicado em: 14/05/2008 - 16:10

Bom eu já passei por um problema pareciso com esse. O fato de você retirar o cache da página não siginica necessáriamente que você está matandando a SESSION do usuário. Se você estiver usando ASP, dê um SESSION.ABANDON, se for PHP de um unset nas variáveis de sessão, no PHP. Qualuqer coisa poste aqui.

 

Flávio

   - Publicado em: 14/05/2008 - 16:37

Eu usei para corrigir um problema em jSP quando dou um session.invalidate() a sessão é invalidada mais ao voltar no botao do navegador ou backspace , vc está logado... mas ao dar refresh , redireciona para o login... (no IE tah funcionando , mas no firefox e Netscape não ) Meu site... www.ifranca.com.br

 

Ramon

   - Publicado em: 14/05/2008 - 17:02

Eu realmente vi que o firefox pega o cache quando clicamos no botão voltar do navegador, o ideal seria você fazer como que a página desse um refresh automatico nesse caso. Eu vou ver se descubro algo e posto aqui. caso você descubra, poste tamém obrigado.

 

Jordana

   - Publicado em: 08/06/2008 - 13:45

Olá,eu não entendo nada de cachê . Entrei aqui para relatar um problema e pedir ajuda . Meu Gigafoto,fica atualizando de um em um segundo,a página fica carregando e o botão parar fica piscando,aí aparece interrompido,concluído . A barrinha verde não para ela carrega,descarrega e carrega de novo . Eu uso o Firefox . E é so quando estou logada no meu,porque quando visito outros não acontece . Será que é algo de cachê ??

 

Ramon

   - Publicado em: 09/06/2008 - 14:18

Na verdade esse não é um problema de cache, e sim um prblema de carregamentos sucessivos, o idela serial você colocar para a página atualizar a cada 10 ou 15 segundos, para dar tempo de a página ser carregada por completo antes de ser recarregada novamente.Lembre-se que dependendo da sua conexao a página pode levar 8 ou mais segundos para ser carregada.

 

Messias Anjos

   - Publicado em: 07/07/2008 - 23:12

Muito importante o post acima, atraves do mesmo implementei o codigo nos meus sites

 

Autor da matéria
Ramon Ferreira Silva
Estudante de Sistemas de Informação, estudou no CEFET/RJ e hoje trabalha com ASP, ASP.NET, PHP e AJAX.

Todas as matérias de Ramon Ferreira Silva

Publicidade
Seguir o Oficina da Net
RSS

RSS

RSS
Top matérias do mês
Matérias relacionadas
Tags

© 2005 - 2009 - Oficina da Net - v 4.0 - É proibida a reprodução parcial ou completa do conteúdo deste site sem autorização por escrito. Resolução adequada: 1024x768px.