问题:
我在客户的网站上托管一个小部件,对于网站上的每个页面都是不同的。
要呈现窗口小部件,客户端在其页面上包含脚本标记。为网站上的每个页面加载此脚本标记,它返回的代码取决于页面。
因此,如果此脚本被缓存,最终结果是我们为错误的页面提供了一个小部件。
现在,当我们提供脚本时,我们在响应标头中设置
Cache-Control: max-age=0 Expires : 24 hours in the past
但有时浏览器仍会缓存脚本。
问题:
有没有办法在所有情况下使用http标头来停止缓存,还是我们必须采取完全不同的方法?
更新:
topek建议的标头大大提高了脚本的不可缓存性。但是,在使用后退,前进或重新加载按钮时,(再次在Chrome中似乎是最具缓存特性的版本)脚本仍然会被缓存。如果您确实点击任何内容,它将从服务器获取。
似乎停止缓存的唯一简单方法是设置每个页面加载保证不同的脚本源(如esilija和tejs所建议的那样)。
答案 0 :(得分: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
之前,并在服务器上重写该请求。