我和这个问题的作者有完全相同的问题:Preventing iframe caching in browser - 我的iframe中的url被缓存了。我在我的标题中请求了一种过度的反缓存策略,Fiddler显示youtube视频(iframe中的页面)也没有缓存,每次我使用iframe重新加载页面时,URL都是相同的。
有什么不同?可能有效的链接问题的几个答案假设iframe是由JavaScript动态构建的。但是我把我的iframe作为一个简单的静态HTML,只需用php动态插入的参数很少。通过JavaScript制作整个网站的这一个功能(它不大)可以作为一种解决方法,但我宁愿坚持使用php / html。
所以:是否可以在没有JavaScript的情况下阻止在iframe中缓存网址?如果是,怎么做?
编辑 - 我的代码:
$videoUrl = 'xL0NjTDgwY4';
$x = rand();
echo '<iframe id="player2" type="text/html" ';
echo 'src="http://www.youtube.com/embed/'.$videoUrl.'?enablejsapi=1&origin=http://e-history.cz&n="'.$x;
echo '></iframe>';
Fiddler表示:
主持人:www.youtube.com
网址:/embed/M7lc1UVf-VE?enablejsapi=1&origin=http://example.com
缓存:无缓存;过期时间:Tue, 27 Apr 1971 19:44:06 EST
在我的网站上缓存外部网页:no-store, no-cache, must-revalidate, post-check=0, pre-check=0; Expires: Thu, 19 Nov 1981 08:52:00 GMT
如果需要,请询问其他字段。
Fiddler显示的网址是我第一次访问的网址,当时我从YouTube Player API复制了iframe模板(链接中的第二个代码块,显示了纯HTML中的iframe。
我的缓存相关标头(在.htaccess中):
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT"
并在meta:
<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="cache-control" content="no-cache" />
Fiddler中显示的失效日期表明我订购了更多反缓存标头when I though I had a caching problem。从理论上讲,这些重复可能导致问题,但似乎不太可能。
另外一个可能相关的信息:我的网站上有另一个iframe,它可以正常工作,除了谷歌地图的常用内容之外没有缓存。此工作iframe的代码:
if(isset($kml)) {
$adr = 'https://maps.google.com?q='.$kml.'&ll=';
} else {
$adr = 'https://maps.google.com?ll=';
}
$adr .= $lat.','.$lon.'&z='.$zoom;
$adr .= '&t=h&output=embed';
echo '<iframe class="mapa" src="'.$adr.'"></iframe>';
答案 0 :(得分:1)
尝试将expires标头设置为-1。一旦从服务器发送页面,这将使页面到期,从而使浏览器缓存无效。您还应该设置正确的Pragma缓存标头。
答案 1 :(得分:1)
我很困惑,但很高兴 - 它现在有效。 iframe被困在星期三(我问的时候)和昨天早上。然后我几乎整天评论了它。当我今天(2014年1月31日)取消评论时,它没关系 - 我现在可以自由切换URL。
问题解决了我。我不是很确定,但我认为这是Firefox bug 356558。由于它已经多年没有得到解决,我想没有简单的解决方案,我找到了等待缓存消失的解决方法。无论如何,我现在不会接受任何答案,因为可以有更快的非JavaScript解决方法,这可以帮助其他人解决同样的问题。