Come si impedisce a Firefox e Safari di memorizzare nella cache i contenuti iframe?
Ho una semplice pagina web con un iframe a una pagina su un sito diverso. Sia la pagina esterna che quella interna hanno intestazioni di risposta HTTP per impedire la memorizzazione nella cache. Quando faccio clic sul pulsante "indietro" nel browser, la pagina esterna funziona correttamente, ma non importa cosa, il browser recupera sempre una cache della pagina iframe. IE funziona bene, ma Firefox e Safari mi stanno dando problemi.
La mia pagina web ha un aspetto simile a questo:
<html>
<head><!-- stuff --></head>
<body>
<!-- stuff -->
<iframe src="webpage2.html?var=xxx" />
<!-- stuff -->
</body>
</html>
La var
variabile cambia sempre. Nonostante il fatto che l'URL dell'iframe sia cambiato (e quindi, il browser dovrebbe fare una nuova richiesta a quella pagina), il browser recupera semplicemente il contenuto memorizzato nella cache.
Ho esaminato le richieste e le risposte HTTP andando avanti e indietro e ho notato che anche se la pagina esterna contiene <iframe src="webpage2.html?var=222" />
, il browser continuerà a recuperare webpage2.html?var=111
.
Ecco cosa ho provato finora:
- Modifica dell'URL iframe con un valore var casuale
- Aggiunta di intestazioni Expires, Cache-Control e Pragma alla pagina Web esterna
- Aggiunta di intestazioni Expires, Cache-Control e Pragma alla pagina web interna
Non sono in grado di eseguire trucchi JavaScript perché sono bloccato dal criterio della stessa origine.
Sto esaurendo le idee. Qualcuno sa come impedire al browser di memorizzare nella cache il contenuto iframed?
Aggiornare
Ho installato Fiddler2 come suggerito da Daniel per eseguire un altro test e, sfortunatamente, ottengo ancora gli stessi risultati.
Questo è il test che ho eseguito:
- La pagina esterna genera un numero casuale utilizzando
Math.random()
in JSP. - La pagina esterna mostra un numero casuale sulla pagina web.
- La pagina esterna chiama iframe, passando un numero casuale.
- La pagina interna mostra un numero casuale.
Con questo test, sono in grado di vedere esattamente quali pagine vengono aggiornate e quali sono memorizzate nella cache.
Test visivo
Per un rapido test, carico la pagina, passo a un'altra pagina, quindi premo "indietro". Ecco i risultati:
Pagina originale:
- Pagina esterna: 0.21300034290246206
- Pagina interna: 0.21300034290246206
Lasciando la pagina, quindi colpendo di nuovo:
- Pagina esterna: 0.4470929019483644
- Pagina interna: 0.21300034290246206
Ciò mostra che la pagina interna viene memorizzata nella cache, anche se la pagina esterna la chiama con un diverso parametro GET nell'URL. Per qualche ragione, il browser ignora il fatto che l'iframe richiede un nuovo URL; carica semplicemente quello vecchio.
Fiddler Test
Abbastanza sicuro, Fiddler conferma la stessa cosa.
(Carico la pagina.)
Viene chiamata la pagina esterna. HTML:
0.21300034290246206
<iframe src="http://ipv4.fiddler:1416/page1.aspx?var=0.21300034290246206" />
http: //ipv4.fiddler: 1416 / page1.aspx? var = 0.21300034290246206 viene chiamato.
(Esco dalla pagina e poi rispondo.)
Viene chiamata la pagina esterna. HTML:
0.4470929019483644
<iframe src="http://ipv4.fiddler:1416/page1.aspx?var=0.4470929019483644" />
http: //ipv4.fiddler: 1416 / page1.aspx? var = 0.21300034290246206 viene chiamato.
Bene, da questo test, sembra che il browser Web non memorizzi la pagina nella cache, ma memorizzi nella cache l'URL dell'iframe e quindi effettui una nuova richiesta su quell'URL memorizzato nella cache. Tuttavia, sono ancora perplesso su come risolvere questo problema.
Qualcuno ha qualche idea su come impedire al browser Web di memorizzare nella cache gli URL iframe?