缓存我的脚本的Chrome(可能还有其他浏览器)包括
Chrome (and possibly other browsers) caching my script include
问题:
我在客户的网站上托管了一个小部件,该小部件对网站上的每个页面都会有所不同。
为了呈现小部件,客户端在其页面上包含一个脚本标记。这个脚本标记是为网站上的每个页面加载的,它返回的代码取决于页面。
因此,如果这个脚本被缓存,最终结果是我们为错误的页面提供了一个小部件。
现在,当我们提供脚本时,我们在响应标头中设置
缓存控制:最大年龄=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
一样,并在服务器上重写请求。
相关文章:
- 是什么让一个“;Uncaught RangeError:超过了最大调用堆栈大小“;错误(Chrome,在其他浏览器中显示
- jquery代码在Mozilla中有效,但在其他浏览器上无效
- java脚本在Chrome和其他浏览器中对LocaleTimeString的不同行为
- Javascript的某些部分在Chrome中不起作用,但在其他浏览器中可以完美工作
- 如何隐藏空<span>在IE中使用javascript.(注意,在其他浏览器中工作正常)
- 我的时间倒计时脚本在谷歌浏览器中工作正常,但在其他浏览器中打开时它显示为南楠
- 使用一个Javascript函数提交多个表单可以在FF中工作,而不需要其他浏览器
- 带有Safari的Javascript;不起作用——所有其他浏览器都起作用
- Javascript可以在chrome中使用,但不能在其他浏览器中使用
- 有没有一种方法可以在过滤掉iOS Chrome、Firefox和其他浏览器的同时检测iOS safari
- 在其他浏览器中打开页面时,令牌未保存在$window.sessionStorage中
- 无法从IE中的data.responseText获取结果,但在其他浏览器中工作
- 在Firefox中使用锤子捏 错误地定向 - 适用于所有其他浏览器
- 索引在IE中导致错误;在其他浏览器中工作
- 将JSON对象转换为敲除observable在IE8中不起作用,但在所有其他浏览器中都起作用
- Javascript可以在Safari上运行,但不能在任何其他浏览器上运行
- 滑动在IE中不起作用.但它在所有其他浏览器中都能正常工作
- 滑块图像在Internet Explorer中不起作用,但在其他浏览器中有效
- 我怎样才能摆脱chrome或其他浏览器中的录音符号
- 这个JavaScript / jQuery代码是否在ie8或其他浏览器中泄漏