Google Chrome缓存

9

我有一个包含 Flash(Flex)应用程序的 HTML 页面。

我有以下标头:

<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">
<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-STORE">
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="-1">

此外,每次我发布应用程序的新版本时,我都会更改文件名。因此,它变成了类似于MyApp_v1.swf的东西,然后更新为MyApp_v2.swf。
尽管如此,Chrome仍会缓存HTML页面和SWF文件。这是一个重大问题,因为客户端除非清除浏览器缓存,否则无法看到更新后的SWF文件。
我甚至试图通过更改htaccess文件并重命名托管SWF文件的index.html文件来解决此问题:
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://www.mysite.com/app[R,L] 
DirectoryIndex index.html #this was changed from myapp.html

即使这样做了,Chrome仍然会缓存swf文件,并且仍然从旧的html文件中读取。我在html上查看源代码,它仍然显示旧文件。在其他浏览器中都没有问题。
3个回答

5

不幸的是,这并不是一个完整的解决方案,因为我无法要求所有客户清除缓存。基本上,他们将永远困在错误的页面中,无法自拔!我猜另一种选择是将整个应用程序移动到服务器上的一个新目录,并使用一个.htaccess重定向。这样应该能强制刷新并覆盖浏览器缓存,对吗? - JonoB
1
如果您在任何src或href属性的链接中添加一个请求参数,比如"src="mipaht.jpg?ver=1"",那么将会强制浏览器更新源码,这对JavaScript、图片和CSS都有效,所以在这种情况下也可能有效。 - ncubica
如果您使用动态字符串,比如日期时间,您可以确保用户始终下载新版本而不是缓存。例如:src="myfile.swf?ver=1407279708 - DrCord

2
使用这个“no-store”额外标签,缓存在Chromium(Chrome)和其他兼容的浏览器中都能正常工作:
header("Cache-Control: no-cache, no-store, must-revalidate");
header("Pragma: no-cache, no-store");

2

如果你们在这方面遇到困难,我找到了一些简单有效的方法...

我试过:
1. 按下ctrl + f5
2. 按下ctrl + shift + 5
3. 在开发者工具中设置“无缓存”。

最终对我有用的方法是:
在单击重新加载图标时按住CTRL键!


这不是一个解决方案。如果页面声明了“no-cache”,你不应该手动强制它遵守指令。而且,这将在有或没有指定“no-cache”的情况下都起作用。 - cpu
1
可能不是解决方案,但肯定很方便。 - Logic1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接