HTTP 缓存的几个基础概念
HTTP 缓存的目标是减少重复传输,让浏览器和服务器都少做无用功。理解缓存并不需要先记住所有头字段,先分清“强缓存”和“协商缓存”就够了。
强缓存
强缓存命中时,浏览器可以直接使用本地副本,不需要向服务器发请求。常见控制字段是:
1 | Cache-Control: max-age=3600 |
它表示资源在 3600 秒内可以认为是新鲜的。对于带版本号的静态资源,例如 app.abc123.js,可以设置较长缓存时间。
协商缓存
协商缓存会向服务器确认资源是否变化。如果没变化,服务器返回 304 Not Modified,浏览器继续使用本地缓存。
常见字段包括:
Last-Modified/If-Modified-SinceETag/If-None-Match
ETag 通常比 Last-Modified 更精确,因为它可以根据内容生成标识。
静态资源的版本化
缓存策略最好和资源命名配合使用。文件内容变化时,文件名也变化;文件名不变时,内容也不变。
这样可以让静态资源使用长缓存,同时避免用户拿到旧代码。
HTML 与静态资源不同
HTML 页面一般不适合设置太长强缓存,因为它通常负责引用最新资源。更常见的做法是让 HTML 使用较短缓存或协商缓存,而 JS/CSS/图片使用长缓存。
小结
HTTP 缓存不是单个字段的问题,而是资源更新策略的一部分。强缓存减少请求,协商缓存减少传输,版本化文件名解决更新问题。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 xiaobai050!