Resolvendo o problema do Cache

Publicado em: 30/10/2007  |  Ajax  |  Visualizações: 3.429  |  7 Comentário(s)
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
compartilhe
  Dica: Confira todo nosso conteúdo de Ajax no site.
Links patrocinados
Últimos artigos do editor

ajax.gif Exibindo Hints com AJAX
É comum ver em aplicações De.
ajax.gif Preenchendo uma ComboBox .
Munidos de nossos conhecimen.
5325e1974ce1b59ade2a42b2d451d3df.jpg Caminhando pelo DOM - Par.
Bem amigos, peço desculpas a.
5325e1974ce1b59ade2a42b2d451d3df.jpg Caminhando pelo DOM - Par.
Chegamos a parte final de no.
5325e1974ce1b59ade2a42b2d451d3df.jpg Caminhando pelo DOM - Par.
Cuntinuamos a nossa cmainha .
5325e1974ce1b59ade2a42b2d451d3df.jpg Caminhando pelo DOM - Par.
O Document Object Model é a .
Opinião do leitor:
7 Comentário(s)

  Messias Anjos comentou:

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

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

 Ramon comentou:

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.

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

 Jordana comentou:

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ê ??

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

 Ramon comentou:

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.

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

  Flávio comentou:

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

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

 Ramon comentou:

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.

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

  Flávio comentou:

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

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

Acesso restrito
Destaques
Como assinar um RSS Como assinar um RSS
Aprenda a assinar um blog/site utilizando o agregador de notícias em formato RSS
Peixe Grande 2008 Peixe Grande 2008
O Oficina da Net está este ano participando do Projeto Peixe Grande 2008 na categoria de Blog. Ajude-nos vote!
iPhone 3G no Brasil iPhone 3G no Brasil
O smartphone da Apple chegou ao Brasil com a tecnologia de terceira geração de telefonia.
Links patrocinados
Autor
Artigos Relacionados
Novos Artigos
Notícias Relacionados
Assine nosso RSS

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