O navegador não pode usar o cache de chamadas anteriores do ajax?
Eu estou tentando contar com o cache do navegador para manter dados JSON retornados de chamadas AJAX no jQuery.
A atividade normal do navegador depende do cache do navegador o tempo todo. Exemplo: as imagens JPG e GIF não são atualizadas em uma página recarregada.
Mas quando eu tento usar chamadas ajax getJSON jQuery, não consigo evitar a busca dos dados do servidor.
Meus cabeçalhos retornados são assim (confirmado com firebug):
Transfer-Encoding: chunked
Date: Wed, 05 Aug 2009 02:55:39 GMT
Content-Type: text/plain; charset=ISO-8859-1
Expires: Wed, 05 Aug 2009 03:55:39 GMT
Cache-Control: max-age=3600
No entanto, uma atualização imediata da página faz com que solicitações idênticas atinjam o servidor.
Eu vi várias postagens sobre como evitar o comportamento de cache, que não é o que eu preciso. Eu vi várias postagens sobre o uso de cache, mas todos parecem confiar em salvar dados no DOM. Eu quero algo que se comporte como as imagens em cache durante uma recarga de página.
O navegador não consegue buscá-lo em seu próprio cache?
--x - x - x - x ATUALIZAR --x - x - x--
Para minha decepção, várias pessoas respeitáveis concordam que isso não é apenas possível. Alguns até argumentam que não deveria ser (o que ainda me deixa perplexo).
Stubburn a uma falha, eu tentei o seguinte:
Eu defino o cabeçalho Etag em todas as páginas de saída que eu quero colocar em cache (eu escolho alguns argumentos de URL de opção que representam os dados que estou solicitando e uso isso apenas para o valor Etag)
No início da próxima solicitação, simplesmente verifico se o cabeçalho "If-None-Match" está na solicitação. Nesse caso, o navegador não está armazenando o pedido em cache como eu queria, então enviei uma resposta não modificada.
Testes mostram que o Firefox não armazenará em cache meu pedido (mas eu ainda posso evitar a parte "buscar dados caros" do meu cgi), enquanto o IE6 irá armazená-lo em cache (e nem tentar recuperar do servidor).
Não é uma resposta bonita, mas está funcionando para mim por enquanto
(essas atualizações de página inteira de dados gráficos não serão tão lentas ou caras agora).
(O que? Estou executando o IE6! OMG! Oh, pareça um esquilo!)