Como você evita que o Firefox e o Safari armazenem conteúdo iframe em cache?
Tenho uma página da Web simples com um iframe para uma página em um site diferente. Tanto a página externa quanto a página interna têm cabeçalhos de resposta HTTP para evitar o armazenamento em cache. Quando clico no botão "voltar" no navegador, a página externa funciona corretamente, mas não importa o que aconteça, o navegador sempre recupera um cache da página iframed. O IE funciona bem, mas o Firefox e o Safari estão me causando problemas.
Minha página da web se parece com isto:
<html>
<head><!-- stuff --></head>
<body>
<!-- stuff -->
<iframe src="webpage2.html?var=xxx" />
<!-- stuff -->
</body>
</html>
A var
variável sempre muda. Apesar de a URL do iframe ter mudado (e, portanto, o navegador deve estar fazendo uma nova solicitação para aquela página), o navegador apenas busca o conteúdo em cache.
Eu examinei as solicitações e respostas HTTP indo e voltando e percebi que mesmo se a página externa contiver <iframe src="webpage2.html?var=222" />
, o navegador ainda fará a busca webpage2.html?var=111
.
Aqui está o que tentei até agora:
- Alterar URL iframe com valor var aleatório
- Adicionar cabeçalhos Expires, Cache-Control e Pragma à página da web externa
- Adicionar cabeçalhos Expires, Cache-Control e Pragma à página interna
Não consigo fazer nenhum truque de JavaScript porque estou bloqueado pela política de mesma origem.
Estou ficando sem ideias. Alguém sabe como impedir que o navegador armazene em cache o conteúdo iframed?
Atualizar
Instalei o Fiddler2 como Daniel sugeriu para realizar outro teste e, infelizmente, ainda estou obtendo os mesmos resultados.
Este é o teste que realizei:
- A página externa gera um número aleatório usando
Math.random()
em JSP. - A página externa exibe um número aleatório na página da web.
- A página externa chama iframe, passando um número aleatório.
- A página interna exibe um número aleatório.
Com esse teste, posso ver exatamente quais páginas estão sendo atualizadas e quais estão armazenadas em cache.
Teste Visual
Para um teste rápido, eu carrego a página, navego para outra página e pressiono "voltar". Aqui estão os resultados:
Página original:
- Página externa: 0,21300034290246206
- Página interna: 0,21300034290246206
Saindo da página e voltando:
- Página externa: 0,4470929019483644
- Página interna: 0,21300034290246206
Isso mostra que a página interna está sendo armazenada em cache, embora a página externa a esteja chamando com um parâmetro GET diferente na URL. Por algum motivo, o navegador está ignorando o fato de que o iframe está solicitando um novo URL; ele simplesmente carrega o antigo.
Teste de Fiddler
Com certeza, Fiddler confirma a mesma coisa.
(Eu carrego a página.)
A página externa é chamada. HTML:
0.21300034290246206
<iframe src="http://ipv4.fiddler:1416/page1.aspx?var=0.21300034290246206" />
http: //ipv4.fiddler: 1416 / page1.aspx? var = 0.21300034290246206 é chamado.
(Eu saio da página e depois volto.)
A página externa é chamada. HTML:
0.4470929019483644
<iframe src="http://ipv4.fiddler:1416/page1.aspx?var=0.4470929019483644" />
http: //ipv4.fiddler: 1416 / page1.aspx? var = 0.21300034290246206 é chamado.
Bem, a partir desse teste, parece que o navegador da web não está armazenando em cache a página, mas está armazenando em cache a URL do iframe e, em seguida, fazendo uma nova solicitação nessa URL em cache. No entanto, ainda estou perplexo sobre como resolver esse problema.
Alguém tem alguma ideia sobre como impedir que o navegador da web armazene em cache os URLs do iframe?