13
防止浏览器中的iframe缓存
如何防止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: …