为何Nginx配置的Cache-Control在Chrome中不生效?
Nginx配置未正确匹配请求路径
检查你的location规则是否准确覆盖了/placeholder/300x400这类请求路径。如果路径匹配范围错误,Nginx不会给目标请求添加Cache-Control头。可以直接在服务器执行curl -I https://z.wiki/placeholder/300x400,查看实际返回的响应头,确认Cache-Control是否存在。Cache-Control参数设置不合理
如果配置里包含no-cache、no-store或max-age=0这类指令,浏览器不会缓存资源。比如no-cache会强制浏览器每次验证资源有效性,表现为无本地缓存;no-store则完全禁止缓存。需确认配置的是public, max-age=86400这类允许缓存的参数。Chrome开发者工具禁用了缓存
打开Chrome开发者工具(F12),检查「Network」面板顶部的「Disable cache」选项是否被勾选。若勾选,浏览器会强制跳过缓存逻辑,即使响应头配置正确也不会缓存资源。响应头存在冲突的缓存指令
除Cache-Control外,检查响应中是否存在Pragma: no-cache或Expires头。Pragma: no-cache会覆盖部分Cache-Control规则;若Expires时间早于当前时间,浏览器也不会缓存资源。后端服务自身输出了缓存头
如果你的占位图后端程序也返回了Cache-Control头,Nginx默认不会覆盖它,最终响应头会是后端输出的内容,而非Nginx配置的规则。可暂时关闭后端的缓存头输出,再测试Nginx配置是否生效。HTTPS环境下的缓存限制
HTTPS环境中,若Cache-Control未明确设置public参数,部分浏览器会对私有缓存施加更严格的限制。确保指令包含public,允许浏览器及中间节点缓存资源。
内容的提问来源于stack exchange,提问作者timy

