Firebase Hosting未识别Expiration Header,配置后无效果求助
兄弟,我之前折腾Firebase Hosting的时候也踩过这个缓存头的坑,给你列几个最常见的排查点:
先确认你的firebase.json配置格式完全正确
很多时候是配置放错位置或者语法写错了,正确的缓存头配置应该是在hosting字段下的headers数组里,举个标准例子:{ "hosting": { "public": "dist", "headers": [ { "source": "**/*.{js,css,woff2,woff}", "headers": [ { "key": "Cache-Control", "value": "public, max-age=31536000, immutable" } ] }, { "source": "**/*.html", "headers": [ { "key": "Cache-Control", "value": "public, max-age=600" } ] } ] } }重点注意
source的通配符:**是匹配所有子目录,*.js只匹配根目录的JS文件,如果你要覆盖所有层级的资源,必须用**/*.js这种写法。别忘重新部署配置!
改完firebase.json后,一定要运行firebase deploy --only hosting把最新配置推给Firebase服务器——很多人只更新了代码,忘了同步配置,结果旧的缓存规则还在生效。浏览器缓存搞的鬼!
有时候你已经部署了新配置,但浏览器还抱着旧缓存不放。这时候打开开发者工具(F12),在Network面板勾选「禁用缓存」,然后刷新页面再看请求头;或者直接用Ctrl+F5(Windows)/Cmd+Shift+R(Mac)强制刷新。检查rewrites规则会不会干扰
如果你的hosting里配置了rewrites(比如单页应用把所有请求指向index.html),要确保headers的source规则放在rewrites前面,而且更具体的规则要排在前面(比如先写**/*.js,再写/**的rewrite),不然通用的rewrite可能会覆盖你的缓存头匹配。Firebase自动优化的资源要注意
Firebase Hosting会自动优化图片、字体这类资源,不过只要你在headers里明确指定了对应资源的缓存规则,自定义规则会优先于默认规则。但如果你的source没覆盖到这些优化后的资源路径,那就会用默认规则。
内容的提问来源于stack exchange,提问作者MoB

