0

问题:

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

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

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

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

缓存控制:max-age=0
过期时间:过去 24 小时

但有时浏览器仍会缓存脚本。

问题:

有没有办法在所有情况下都使用 http 标头来停止缓存,还是我们必须采取完全不同的方法?

更新:

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

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

4

1 回答 1

1

这两个标题应该可以解决问题:

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并在您的服务器上重写请求。

于 2011-11-15T19:17:43.800 回答