缓存的难点往往不是“要不要打开”,而是如何回答:这份内容可以复用多久,什么时候必须重新确认?
从内容的变化方式开始
页面入口会变化,带版本号的图片或样式文件通常可以保持不变。为它们使用相同的缓存策略,容易让更新和速度互相牵制。先按内容的变化方式分类,再决定响应头。
两个容易混淆的指令
no-cache 允许保存响应,但复用之前需要验证;no-store 则要求缓存不要存储响应。名字相近,表达的边界却不同。涉及个人信息的响应,还需要认真考虑私有缓存与共享缓存之间的区别。
# 示例:页面复用前先验证
Cache-Control: no-cache
# 示例:带内容指纹且永不覆盖的静态文件
Cache-Control: public, max-age=31536000, immutable
文件名也是发布流程的一部分
长期缓存适合内容变化时同步更换 URL 的资源。例如样式文件修改后生成新的文件名,再由新的页面引用它。若始终覆盖同一个 URL,客户端就可能继续使用缓存里的旧内容。
验证时同时检查首次请求与再次请求。浏览器开发者工具里的“禁用缓存”适合排查,却不代表普通访问者实际经历的流程。
继续阅读:MDN · HTTP caching
— END OF NOTE —
继续阅读其他手记 →