我可以依靠ETag进行缓存控制

时间:2013-12-12 14:09:44

标签: javascript http caching requirejs browser-cache

我们当前的部署使用归属构建缓存清除方法:我们的映射文件包含我们的javascript文件的哈希值(此映射是在应用程序启动时创建的)。然后在我们的模板中使用此文件中的值来生成脚本标记,该标记包含用于缓存清除的GET参数,即<script src="/static/js/somefile?v=adg34d>

我目前正在将整个页面转换为使用RequireJS,我想摆脱这些缓存破坏参数,因为它们很难实现。我们的HTTP服务器配置为向其提供的每个资产资源添加正确的Last-ModifiedETag标头。如果我查看Chrome Web控制台,我可以看到浏览器也使用它并获得正确的304。虽然我相信Chrome可以做到这一点,但当然还有其他浏览器。

问题是:如果我只使用Last-ModifiedETag标头可以依靠浏览器来正确使用或者我真的需要缓存破坏参数?

我只需要支持:

  • 火狐
  • IE&gt; = 8
  • Safari&gt; = 5

1 个答案:

答案 0 :(得分:0)

是的,您可以依赖浏览器,但等待304响应可能需要很长时间。谷歌以更有效的方式做到这一点。缓存清除参数v的每个值代表特定版本的文件。如果您不更改该值,浏览器将跳过版本验证并继续使用Cache-ControlExpires指示的本地缓存。

所以,这是性能和便利之间的决定。

案例2.如果您的文件不存在但是动态创建(即实时合并一些脚本文件),您也需要参数。