IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

Chrome 里 Max-age 和 ETag 的古怪逻辑

Soulogic 2010-07-21 09:36:03 累计浏览 3,703 次
本机暂存

    简单的说,对于 Header 里同时有 Max-age 和 ETag 的情况,Chrome 跟所有其他浏览器的解释都是相反的

    按我的理解,如果同时设置了 Max-age 和 ETag,在 Max-age 的有效期内,浏览器是不再发请求的,等过了有效期,再在请求里带上 ETag。但是在 Chrome 里反而会起反效果:如果一个网页里的图片只有 ETag,那么在 Chrome 当前 tab 页的整个生存周期,可能只会偶尔被重新读取,可如果同时包含了 ETag 和 Max-age,那么你每点一次链接,那些图片都要被重新读取(也就是比没设 Max-age 时更糟糕了)。这只有网很慢的时候才会被观察到,就像我昨晚用 ssh -D 连接一个远程 phpMyAdmin 时,每点一步操作,都会看到所有图标白上那么一两秒,然后才被读出来,直到调用了内置的 Developer Tools > Resources 时,看到一大堆图片的 304 返回时,才明白是 ETag 跟 Max-age 冲突了,索性在 Apache 里设置全局的 FileETag none

    由于 Chrome 的出格,导致 ETag 更加鸡肋了,我怀疑只有极少数的 AJAX POST 才需要像以前介绍过的那样由脚本自己做 ETag。当页面被 squid/CDN 缓存了两层之后,最简单有效的方法还是设置超大 Max-age、一旦有更改就变文件名。

同分类推荐文章

  1. translateZ() (2026-06-25 21:18:56)
  2. translateY() (2026-06-25 21:17:56)
  3. translateX() (2026-06-25 21:16:01)

查看更多 前端 文章 →

建议继续学习

  1. Chrome和goagent的配置方法,你懂的 (累计阅读 16,842)
  2. 警惕 Chrome 的查看源代码 (View Page Source) 功能 (累计阅读 7,170)
  3. [译]Google Chrome中的高性能网络 (累计阅读 6,699)
  4. PHP处理Etag、lastModified和Expires (累计阅读 6,093)
  5. 用谷歌浏览器来当手机模拟器 (累计阅读 5,306)
  6. 在CGI中通过Etag和Cache-Control来控制流量,访问量及生效时间 (累计阅读 4,331)
  7. 解决Chrome最小字体限制 (累计阅读 4,102)
  8. 解决jQuery动画在chrome下暴走的问题 (累计阅读 4,082)
  9. ETag 简介 (累计阅读 3,776)
  10. Http 协议中ETag的用法 (累计阅读 3,620)