Jak zapobiec buforowaniu zawartości iframe przez przeglądarkę Firefox i Safari?
Mam prostą stronę internetową z ramką iframe prowadzącą do strony w innej witrynie. Zarówno strona zewnętrzna, jak i strona wewnętrzna mają nagłówki odpowiedzi HTTP, aby zapobiec buforowaniu. Kiedy klikam przycisk „Wstecz” w przeglądarce, zewnętrzna strona działa poprawnie, ale bez względu na wszystko przeglądarka zawsze pobiera pamięć podręczną strony w ramce iframe. IE działa dobrze, ale Firefox i Safari sprawiają mi kłopoty.
Moja strona internetowa wygląda mniej więcej tak:
<html>
<head><!-- stuff --></head>
<body>
<!-- stuff -->
<iframe src="webpage2.html?var=xxx" />
<!-- stuff -->
</body>
</html>
var
Zmienna zawsze zmienia. Pomimo faktu, że adres URL elementu iframe uległ zmianie (a zatem przeglądarka powinna wysyłać nowe żądanie do tej strony), przeglądarka po prostu pobiera zawartość pamięci podręcznej.
Zbadałem żądania HTTP i odpowiedzi przesyłane tam iz powrotem i zauważyłem, że nawet jeśli zewnętrzna strona zawiera <iframe src="webpage2.html?var=222" />
, przeglądarka nadal będzie pobierać webpage2.html?var=111
.
Oto, czego próbowałem do tej pory:
- Zmiana adresu URL elementu iframe na losową wartość var
- Dodawanie nagłówków Expires, Cache-Control i Pragma do zewnętrznej strony internetowej
- Dodawanie nagłówków Expires, Cache-Control i Pragma do wewnętrznej strony internetowej
Nie mogę wykonywać żadnych sztuczek JavaScript, ponieważ blokują mnie zasady tego samego pochodzenia.
Kończą mi się pomysły. Czy ktoś wie, jak powstrzymać przeglądarkę przed buforowaniem zawartości iframed?
Aktualizacja
Zainstalowałem Fiddler2 tak, jak Daniel zasugerował wykonanie innego testu i niestety nadal otrzymuję te same wyniki.
Oto test, który przeprowadziłem:
- Strona zewnętrzna generuje liczbę losową przy użyciu
Math.random()
JSP. - Strona zewnętrzna wyświetla losową liczbę na stronie internetowej.
- Strona zewnętrzna wywołuje iframe, przekazując losową liczbę.
- Wewnętrzna strona wyświetla losową liczbę.
Dzięki temu testowi mogę dokładnie zobaczyć, które strony są aktualizowane i które są buforowane.
Test wizualny
Aby przeprowadzić szybki test, wczytuję stronę, przechodzę do innej strony, a następnie naciskam „Wstecz”. Oto wyniki:
Strona oryginalna:
- Strona zewnętrzna: 0.21300034290246206
- Strona wewnętrzna: 0.21300034290246206
Opuszczanie strony, a następnie powrót:
- Strona zewnętrzna: 0.4470929019483644
- Strona wewnętrzna: 0.21300034290246206
To pokazuje, że strona wewnętrzna jest buforowana, mimo że strona zewnętrzna wywołuje ją z innym parametrem GET w adresie URL. Z jakiegoś powodu przeglądarka ignoruje fakt, że element iframe żąda nowego adresu URL; po prostu ładuje stary.
Test skrzypka
Rzeczywiście, Fiddler potwierdza to samo.
(Wczytuję stronę.)
Nazywa się strona zewnętrzna. HTML:
0.21300034290246206
<iframe src="http://ipv4.fiddler:1416/page1.aspx?var=0.21300034290246206" />
http: //ipv4.fiddler: 1416 / page1.aspx? var = 0.21300034290246206 .
(Wychodzę ze strony i wracam).
Nazywa się strona zewnętrzna. HTML:
0.4470929019483644
<iframe src="http://ipv4.fiddler:1416/page1.aspx?var=0.4470929019483644" />
http: //ipv4.fiddler: 1416 / page1.aspx? var = 0.21300034290246206 .
Cóż, z tego testu wygląda na to, że przeglądarka internetowa nie buforuje strony, ale buforuje adres URL elementu iframe, a następnie wysyła nowe żądanie na ten buforowany adres URL. Jednak nadal nie wiem, jak rozwiązać ten problem.
Czy ktoś ma jakieś pomysły, jak zatrzymać buforowanie adresów URL elementów iframe przez przeglądarkę internetową?