Firefox ve Safari'nin iframe içeriğini önbelleğe almasını nasıl engellersiniz?
Farklı bir sitedeki bir sayfaya iç çerçeve içeren basit bir web sayfam var. Hem dış sayfada hem de iç sayfada, önbelleğe almayı önlemek için HTTP yanıt başlıkları bulunur. Tarayıcıdaki "geri" düğmesini tıkladığımda, dış sayfa düzgün çalışıyor, ancak ne olursa olsun, tarayıcı her zaman iç çerçeveli sayfanın önbelleğini alıyor. IE gayet iyi çalışıyor, ancak Firefox ve Safari bana sorun çıkarıyor.
Web sayfam şuna benzer:
<html>
<head><!-- stuff --></head>
<body>
<!-- stuff -->
<iframe src="webpage2.html?var=xxx" />
<!-- stuff -->
</body>
</html>
var
Değişken her zaman değişir. İframe'in URL'sinin değişmesine rağmen (ve dolayısıyla tarayıcının o sayfaya yeni bir istekte bulunması gerekir), tarayıcı sadece önbelleğe alınmış içeriği getirir.
İleri geri HTTP isteklerini ve yanıtlarını inceledim ve dış sayfa içerse bile <iframe src="webpage2.html?var=222" />
tarayıcının getirmeye devam edeceğini fark ettim webpage2.html?var=111
.
Şimdiye kadar denediklerim şunlar:
- İframe URL'sini rastgele değişken değeriyle değiştirme
- Dış web sayfasına Expires, Cache-Control ve Pragma üstbilgileri ekleme
- Expires, Cache-Control ve Pragma üstbilgilerini iç web sayfasına ekleme
Aynı kökenli politika tarafından engellendiğim için herhangi bir JavaScript numarası yapamıyorum.
Fikirler tükeniyor. Tarayıcının iç çerçeveli içeriği önbelleğe almasını nasıl durduracağını bilen var mı?
Güncelleme
Daniel'in önerdiği gibi Fiddler2'yi kurdum ve maalesef hala aynı sonuçları alıyorum.
Yaptığım test bu:
- Dış sayfa
Math.random()
, JSP'de kullanarak rastgele sayı üretir . - Dış sayfa web sayfasında rastgele sayı gösterir.
- Dış sayfa, rasgele sayı ileten iframe'i çağırır.
- İç sayfa rastgele sayı görüntüler.
Bu test ile tam olarak hangi sayfaların güncellendiğini ve hangi sayfaların önbelleğe alındığını görebiliyorum.
Görsel Test
Hızlı bir test için sayfayı yüklüyorum, başka bir sayfaya gidiyorum ve ardından "geri" düğmesine basıyorum. Sonuçlar burada:
Orijinal Sayfa:
- Dış Sayfa: 0.21300034290246206
- İç Sayfa: 0.21300034290246206
Sayfadan çıkıp geri dönme:
- Dış sayfa: 0,4470929019483644
- İç sayfa: 0.21300034290246206
Bu, dış sayfanın URL'de farklı bir GET parametresiyle çağırmasına rağmen iç sayfanın önbelleğe alındığını gösterir. Bazı nedenlerden dolayı, tarayıcı, iframe'in yeni bir URL talep ettiği gerçeğini görmezden geliyor; sadece eskisini yükler.
Fiddler Testi
Elbette, Fiddler aynı şeyi onaylıyor.
(Sayfayı yüklerim.)
Dış sayfaya denir. HTML:
0.21300034290246206
<iframe src="http://ipv4.fiddler:1416/page1.aspx?var=0.21300034290246206" />
http: //ipv4.fiddler: 1416 / page1.aspx? var = 0.21300034290246206 çağrılır.
(Sayfadan uzaklaşıyorum ve sonra geri dönüyorum.)
Dış sayfaya denir. HTML:
0.4470929019483644
<iframe src="http://ipv4.fiddler:1416/page1.aspx?var=0.4470929019483644" />
http: //ipv4.fiddler: 1416 / page1.aspx? var = 0.21300034290246206 çağrılır.
Pekala, bu testten, web tarayıcısı sayfayı önbelleğe almıyor gibi görünüyor, ancak iç çerçevenin URL'sini önbelleğe alıyor ve ardından önbelleğe alınan URL için yeni bir istekte bulunuyor. Ancak, bu sorunun nasıl çözüleceği konusunda hala şaşkınım.
Web tarayıcısının iframe URL'lerini önbelleğe almasını nasıl durduracağına dair herhangi bir fikri olan var mı?