Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Chrome(可能还有其他浏览器)缓存我的脚本包括_Javascript_Caching_Node.js_Http Caching - Fatal编程技术网

Javascript Chrome(可能还有其他浏览器)缓存我的脚本包括

Javascript Chrome(可能还有其他浏览器)缓存我的脚本包括,javascript,caching,node.js,http-caching,Javascript,Caching,Node.js,Http Caching,问题: 我在客户的网站上托管了一个小部件,该小部件对于网站上的每个页面都是不同的 为了呈现小部件,客户端在其页面上包含一个脚本标记。此脚本标记为站点上的每个页面加载,它返回的代码取决于页面 因此,如果这个脚本被缓存,最终结果是我们为错误的页面提供了一个小部件 现在,当我们提供脚本时,我们在响应头中设置 Cache-Control: max-age=0 Expires : 24 hours in the past 缓存控制:最大年龄=0 过期时间:过去24小时 但有时浏览器仍然缓存脚本 问题: 有

问题:

我在客户的网站上托管了一个小部件,该小部件对于网站上的每个页面都是不同的

为了呈现小部件,客户端在其页面上包含一个脚本标记。此脚本标记为站点上的每个页面加载,它返回的代码取决于页面

因此,如果这个脚本被缓存,最终结果是我们为错误的页面提供了一个小部件

现在,当我们提供脚本时,我们在响应头中设置

Cache-Control: max-age=0 Expires : 24 hours in the past 缓存控制:最大年龄=0 过期时间:过去24小时 但有时浏览器仍然缓存脚本

问题:

有没有一种方法可以在所有情况下使用http头停止缓存,或者我们必须采取完全不同的方法

更新:

topek推荐的头文件大大提高了脚本的不可缓存性。然而,(同样在Chrome中,似乎是最具缓存攻击性的)当使用后退、前进或重新加载按钮时,脚本仍然被缓存。如果你真的点击了任何东西,它就会从服务器上取出来


似乎停止缓存的唯一简单方法是设置脚本源,保证每个页面加载的脚本源都不同(正如esilija和tejs所建议的那样)。

这两个头应该可以做到:

response.setHeader("Cache-Control", "no-cache, must-revalidate");
response.setHeader("Expires", "Sat, 26 Jul 1997 05:00:00 GMT");
或者根据当前页面设置名称,例如当用户请求页面
http://domain/posts/1
那么脚本名称可以是
http://domain/script/scriptname/posts/1
。使用这种方法,脚本仍然可以每页缓存


不要像
script.js?random_string
那样在脚本上附加查询字符串。代理不能很好地使用这种方法。如果您想在名称中放置一个随机字符串,那么将其放在
.js
前面,就像这样
script-0934234.js
并在服务器上重写请求。

为什么不在js url请求中包含一个随机查询字符串参数呢?或者附加一个日期时间什么的?附加一个随机的无意义的查询字符串。。像这样:
script.js?14091341049134
。从
+新日期生成数字,每毫秒更改一次。如果需要,我们可以这样做。但是,我们喜欢只要求客户机包含单个脚本标记的简单性。我想我们可以要求他们包含几行js,它们将按照您的建议执行。