测速工具天天提示利用浏览器缓存,你给全站加了个Expires 7天,结果用户改了CSS半天不生效,一气之下又全关了。多数人对浏览器缓存的理解就卡在这:要么不敢用,要么用错。核心其实就一个头:Cache-Control。
记住一个原则:带指纹的文件永久缓存,不带指纹的禁缓存。带指纹指文件名里带版本号或内容哈希,比如app.a3f9c2.js,内容一变文件名就变,URL换了缓存自然失效,所以可以放心设一年。
# nginx:静态资源带指纹,缓存一年,immutable
location ~* \.(css|js)$ {
add_header Cache-Control "public, max-age=31536000, immutable";
}
# HTML文档不带指纹,禁止缓存或短缓存
location = /index.html {
add_header Cache-Control "no-cache";
}
# 图片字体类基本不改动,缓存30天
location ~* \.(jpg|png|webp|woff2)$ {
add_header Cache-Control "public, max-age=2592000";
}
no-cache不是不缓存,是每次用之前要问服务器有没有更新,配合ETag或Last-Modified只传304状态不传正文,流量照样省。真正不缓存的是no-store。immutable是给强缓存上双保险:告诉浏览器在有效期内连304确认请求都不用发。
验证按F12开网络面板,看静态资源的Status列:显示200 (from disk cache)或(memory cache)说明强缓存命中,显示304说明协商缓存生效。要是每次刷新都重新下载几百KB的JS,那就是配置根本没生效,先检查add_header有没有被location正则抢走。缓存策略的本质是拿新鲜度换流量,指纹化文件名是让这笔交易稳赚不赔的前提。
申请创业报道,分享创业好点子。点击此处,共同探讨创业新机遇!

