2014-07-24 38 views
0

我的应用程序使用托管在子域上的JavaScript文件,并将其用于跨许多其他子域的页面中。在使用这个js文件的页面中,我已经要求开发者使用no-cache metas,以便我的最后的任何更新都反映在这些页面上。以下是他们在自己的页面中使用标签,阻止来自其他域的脚本的缓存

<meta http-equiv="cache-control" content="max-age=0" /> 
<meta http-equiv="cache-control" content="no-cache" /> 
<meta http-equiv="expires" content="0" /> 
<meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" /> 
<meta http-equiv="pragma" content="no-cache" /> 

编号:https://stackoverflow.com/a/1341133/1787599

这些元标签置于下方的标题标签的脑袋里。当我更新JS文件时,查看使用该文件的页面时不会反映这些更改。在Chrome开发者工具 - >网络标签中,我只能看到304(未修改)的大部分文件,包括JS。虽然这个问题已经回答了很多次,但我仍然不知道问题出在哪里。

注意:这https://stackoverflow.com/a/11724596/1787599答案正在工作。不管什么元素在html中使用都没有关系,.htaccess文件似乎可以覆盖它。

回答

2

元标签只适用于html页面,没有加载资源。相反,对于js文件,请使用标头Cache-Control: no-store进行响应。

延伸阅读:http://en.wikipedia.org/wiki/List_of_HTTP_header_fields#Avoiding_caching

注意,脚本本身必须被更新,以便浏览器请求的,与上面的头一起。

+1

+1对于与同步加载兼容的好解决方案。 –

+0

谢谢。 http://stackoverflow.com/a/11724596/1787599似乎工作。 – NEO

0

当你编辑文件不要忘了包括参数的URL的结尾,就像这样:

<script src="myscripts.js?1"></script> 

然后你可以在每次修改时增加的数量。

通过这种方式,您将强制更新缓存,并确保每个用户都可以加载最新版本。

PD:上面提出的解决方案并不是最优的,因为用户每次加载站点时都会加载文件 - 您正在禁用缓存,并且缓存非常有用。

+0

我试过了,它不起作用,而穆斯曼指出它不是一个优雅的解决方案。强制不缓存的最佳方式是修改.htaccess – NEO

+0

如果您使用Apache,它应该可以工作。禁用缓存并不优雅... –

+0

@ fran.tr在大多数情况下,最好添加一个url参数,但由于他没有管理加载脚本的其他站点,因此这是不可行的。 – Mooseman