¿Cómo se evita que Firefox y Safari almacenen en caché el contenido del iframe?
Tengo una página web simple con un iframe a una página en un sitio diferente. Tanto la página externa como la interna tienen encabezados de respuesta HTTP para evitar el almacenamiento en caché. Cuando hago clic en el botón "Atrás" del navegador, la página exterior funciona correctamente, pero pase lo que pase, el navegador siempre recupera un caché de la página con iframed. IE funciona bien, pero Firefox y Safari me están dando problemas.
Mi página web se parece a esto:
<html>
<head><!-- stuff --></head>
<body>
<!-- stuff -->
<iframe src="webpage2.html?var=xxx" />
<!-- stuff -->
</body>
</html>
La var
variable siempre cambia. A pesar de que la URL del iframe ha cambiado (y, por lo tanto, el navegador debería realizar una nueva solicitud a esa página), el navegador simplemente obtiene el contenido almacenado en caché.
He examinado las solicitudes y respuestas HTTP que van y vienen, y me di cuenta de que incluso si la página exterior contiene <iframe src="webpage2.html?var=222" />
, el navegador seguirá buscando webpage2.html?var=111
.
Esto es lo que he probado hasta ahora:
- Cambiar la URL del iframe con un valor var aleatorio
- Adición de encabezados Expires, Cache-Control y Pragma a la página web externa
- Agregar encabezados Expires, Cache-Control y Pragma a la página web interna
No puedo hacer ningún truco de JavaScript porque estoy bloqueado por la política del mismo origen.
Me estoy quedando sin ideas. ¿Alguien sabe cómo evitar que el navegador almacene en caché el contenido iframed?
Actualizar
Instalé Fiddler2 como sugirió Daniel para realizar otra prueba y, desafortunadamente, todavía obtengo los mismos resultados.
Esta es la prueba que realicé:
- La página externa genera un número aleatorio usando
Math.random()
JSP. - La página exterior muestra un número aleatorio en la página web.
- La página externa llama a iframe, pasando un número aleatorio.
- La página interior muestra un número aleatorio.
Con esta prueba, puedo ver exactamente qué páginas se actualizan y qué páginas se almacenan en caché.
Prueba visual
Para una prueba rápida, cargo la página, navego a otra página y luego presiono "atrás". Aquí están los resultados:
Página original:
- Página exterior: 0.21300034290246206
- Página interna: 0.21300034290246206
Salir de la página y luego devolver el golpe:
- Página exterior: 0.4470929019483644
- Página interior: 0.21300034290246206
Esto muestra que la página interna se está almacenando en caché, aunque la página externa la está llamando con un parámetro GET diferente en la URL. Por alguna razón, el navegador ignora el hecho de que el iframe solicita una nueva URL; simplemente carga el antiguo.
Prueba de violinista
Efectivamente, Fiddler confirma lo mismo.
(Carga la página.)
Se llama la página externa. HTML:
0.21300034290246206
<iframe src="http://ipv4.fiddler:1416/page1.aspx?var=0.21300034290246206" />
Se llama http: //ipv4.fiddler: 1416 / page1.aspx? var = 0.21300034290246206 .
(Me alejo de la página y luego devuelvo el golpe).
Se llama la página externa. HTML:
0.4470929019483644
<iframe src="http://ipv4.fiddler:1416/page1.aspx?var=0.4470929019483644" />
Se llama http: //ipv4.fiddler: 1416 / page1.aspx? var = 0.21300034290246206 .
Bueno, a partir de esta prueba, parece que el navegador web no almacena en caché la página, sino que almacena en caché la URL del iframe y luego realiza una nueva solicitud en esa URL almacenada en caché. Sin embargo, todavía estoy perplejo en cuanto a cómo resolver este problema.
¿Alguien tiene alguna idea sobre cómo evitar que el navegador web almacene en caché las URL de iframe?