Bagaimana Anda mencegah Firefox dan Safari menyimpan konten iframe dalam cache?
Saya memiliki halaman web sederhana dengan iframe ke halaman di situs lain. Baik halaman luar maupun dalam memiliki header respons HTTP untuk mencegah penyimpanan dalam cache. Ketika saya mengklik tombol "kembali" di browser, halaman luar berfungsi dengan baik, tetapi apa pun yang terjadi, browser selalu mengambil cache dari halaman ifram. IE berfungsi dengan baik, tetapi Firefox dan Safari memberi saya masalah.
Halaman web saya terlihat seperti ini:
<html>
<head><!-- stuff --></head>
<body>
<!-- stuff -->
<iframe src="webpage2.html?var=xxx" />
<!-- stuff -->
</body>
</html>
The var
variabel selalu berubah. Terlepas dari kenyataan bahwa URL iframe telah berubah (dan karenanya, browser harus membuat permintaan baru ke halaman itu), browser hanya mengambil konten yang di-cache.
Saya telah memeriksa permintaan dan respons HTTP bolak-balik, dan saya perhatikan bahwa meskipun halaman luarnya berisi <iframe src="webpage2.html?var=222" />
, browser masih akan mengambil webpage2.html?var=111
.
Inilah yang saya coba sejauh ini:
- Mengubah URL iframe dengan nilai var acak
- Menambahkan header Expires, Cache-Control, dan Pragma ke halaman web luar
- Menambahkan header Expires, Cache-Control, dan Pragma ke halaman dalam
Saya tidak dapat melakukan trik JavaScript apa pun karena saya diblokir oleh kebijakan asal yang sama.
Saya kehabisan ide. Adakah yang tahu cara menghentikan browser agar tidak menyimpan konten iframed?
Memperbarui
Saya menginstal Fiddler2 seperti yang disarankan Daniel untuk melakukan tes lain, dan sayangnya, saya masih mendapatkan hasil yang sama.
Ini adalah tes yang saya lakukan:
- Halaman luar menghasilkan nomor acak menggunakan
Math.random()
JSP. - Halaman luar menampilkan nomor acak di halaman web.
- Halaman luar memanggil iframe, meneruskan nomor acak.
- Halaman dalam menampilkan nomor acak.
Dengan pengujian ini, saya dapat melihat dengan tepat halaman mana yang diperbarui, dan halaman mana yang di-cache.
Tes Visual
Untuk tes cepat, saya memuat halaman, menavigasi ke halaman lain, dan kemudian tekan "kembali." Berikut hasilnya:
Halaman Asli:
- Halaman Luar: 0,21300034290246206
- Halaman Dalam: 0,21300034290246206
Meninggalkan halaman, lalu menekan kembali:
- Halaman luar: 0.4470929019483644
- Halaman dalam: 0,21300034290246206
Ini menunjukkan bahwa halaman dalam sedang di-cache, meskipun halaman luar memanggilnya dengan parameter GET yang berbeda di URL. Untuk beberapa alasan, browser mengabaikan fakta bahwa iframe meminta URL baru; itu hanya memuat yang lama.
Uji Fiddler
Benar saja, Fiddler menegaskan hal yang sama.
(Saya memuat halaman.)
Halaman luar disebut. HTML:
0.21300034290246206
<iframe src="http://ipv4.fiddler:1416/page1.aspx?var=0.21300034290246206" />
http: //ipv4.fiddler: 1416 / page1.aspx? var = 0.21300034290246206 dipanggil.
(Saya menavigasi keluar dari halaman dan kemudian membalas.)
Halaman luar disebut. HTML:
0.4470929019483644
<iframe src="http://ipv4.fiddler:1416/page1.aspx?var=0.4470929019483644" />
http: //ipv4.fiddler: 1416 / page1.aspx? var = 0.21300034290246206 dipanggil.
Nah, dari pengujian ini, tampaknya browser web tidak sedang menyimpan halaman, tetapi menyimpan URL iframe dan kemudian membuat permintaan baru pada URL yang di-cache tersebut. Namun, saya masih bingung bagaimana mengatasi masalah ini.
Adakah yang punya ide tentang cara menghentikan browser web dari cache URL iframe?