如何防止Firefox和Safari缓存iframe内容?
我有一个简单的网页,其中包含一个iframe到另一个网站上的页面。外部页面和内部页面都具有HTTP响应标头,以防止缓存。当我单击浏览器中的“后退”按钮时,外部页面正常工作,但是无论如何,浏览器始终会检索iframed页面的缓存。IE可以正常工作,但是Firefox和Safari给我带来了麻烦。
我的网页看起来像这样:
<html>
<head><!-- stuff --></head>
<body>
<!-- stuff -->
<iframe src="webpage2.html?var=xxx" />
<!-- stuff -->
</body>
</html>
该var
变量总是变化。尽管事实上iframe的URL已更改(因此,浏览器应向该页面发出新请求),但浏览器只是获取缓存的内容。
我检查了来回的HTTP请求和响应,并且注意到即使外层页面包含<iframe src="webpage2.html?var=222" />
了浏览器,它仍然可以访存webpage2.html?var=111
。
到目前为止,这是我尝试过的方法:
- 使用随机var值更改iframe网址
- 将Expires,Cache-Control和Pragma标头添加到外部网页
- 将Expires,Cache-Control和Pragma标头添加到内部网页
我无法执行任何JavaScript技巧,因为我被同源政策所阻止。
我的想法不多了。有谁知道如何阻止浏览器缓存iframed内容?
更新资料
我按照Daniel建议执行的另一项测试安装了Fiddler2,但不幸的是,我仍然得到相同的结果。
这是我执行的测试:
- 外页
Math.random()
在JSP中使用生成随机数。 - 外页在网页上显示随机数。
- 外页调用iframe,传入随机数。
- 内页显示随机数。
通过此测试,我可以准确地看到哪些页面正在更新以及哪些页面已缓存。
外观测试
为了进行快速测试,我加载了页面,导航到另一个页面,然后按“返回”。结果如下:
原始页面:
- 外页:0.21300034290246206
- 内页:0.21300034290246206
离开页面,然后回击:
- 外页:0.4470929019483644
- 内页:0.21300034290246206
这表明即使外部页面使用URL中的其他GET参数调用内部页面,也正在缓存内部页面。由于某种原因,浏览器会忽略iframe正在请求新网址的事实;它只是加载旧的。
提琴手测试
果然,提琴手证实了同一件事。
(我加载页面。)
称为外页。HTML:
0.21300034290246206
<iframe src="http://ipv4.fiddler:1416/page1.aspx?var=0.21300034290246206" />
调用了http://ipv4.fiddler:1416 / page1.aspx?var = 0.21300034290246206。
(我离开页面浏览,然后回击。)
称为外页。HTML:
0.4470929019483644
<iframe src="http://ipv4.fiddler:1416/page1.aspx?var=0.4470929019483644" />
调用了http://ipv4.fiddler:1416 / page1.aspx?var = 0.21300034290246206。
好吧,从此测试来看,似乎Web浏览器未在缓存页面,而是在缓存iframe的URL,然后对该缓存的URL发出新请求。但是,我仍然对如何解决此问题感到困惑。
是否有人对如何停止网络浏览器缓存iframe网址有任何想法?