javascript - 我可以依赖 ETags 进行缓存控制吗

标签 javascript http caching requirejs browser-cache

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

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

问题是:如果我只使用Last-ModifiedETag header 可以依靠浏览器来获得它的正确性,还是我真的需要缓存破坏参数?

我只需要支持:

  • 歌剧
  • 火狐
  • Chrome
  • IE >= 8
  • Safari >= 5

最佳答案

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

因此,这是性能和便利性之间的决定。

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

关于javascript - 我可以依赖 ETags 进行缓存控制吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20545777/

相关文章:

asp.net、wcf 身份验证和缓存

javascript - 在 Nodejs 中调用 Array 原型(prototype)上的自定义方法

javascript - 有没有办法用计数器将不同的东西附加到 div 中?

javascript - TinyTable 排序器得到一个未定义的

http - 低流量网站上的 HTTP 压缩(GZip 或 deflate)真的有用吗?

linux - 我可以假设 .cache 目录存在吗?

javascript - 移动到另一个列表时更改 div 的颜色

json - Powershell Invoke-RestMethod 响应不完整

windows - SSL 证书仅适用于本地网络

ios - 使用缓存中的图像创建图像数组 (Swift)