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

Chrome (and possibly other browsers) caching my script include

本文关键字:其他 浏览器 包括 脚本 我的 Chrome 缓存      更新时间:2023-09-26

问题:

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

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

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

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

缓存控制:最大年龄=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-0934234234.js一样,并在服务器上重写请求。

相关文章: