HTTP缓存策略到底该怎么配才有效?

书生シ米阳 阅读 12

我给静态资源加了 Cache-Control: max-age=31536000,但每次刷新页面还是会重新请求,浏览器根本不走缓存,这是为啥?

我试过在 Nginx 里这样配置:

location ~* .(js|css|png|jpg|jpeg|gif|ico|woff2)$ {
    expires 1y;
    add_header Cache-Control "public, immutable";
}

但开发者工具里看到的响应头却是 Cache-Control: no-cache,好像被别的地方覆盖了?是不是还要改 HTML 里的引用方式?

我来解答 赞 7 收藏
二维码
手机扫码查看
1 条解答
打工人路阳
当时我也卡在这,差点怀疑自己是不是得了老年痴呆。后来发现,可能是其他配置覆盖了你的设置。你可以在 Nginx 的配置文件里搜索一下有没有其他的 Cache-Control 头被设置了。有时候全局配置或者 location 块里的其他配置会不小心覆盖掉特定 location 的设置。

你可以尝试在你的 location 块里加上这一行,确保你的设置不会被覆盖:
add_header Cache-Control "public, immutable" always;

这个 always 参数会强制覆盖之前的任何 Cache-Control 设置。

另外,检查一下你的 HTML 文件,确保静态资源的链接没有加一些特殊的参数,比如时间戳或者版本号,这些都会导致浏览器认为资源是新的,从而不走缓存。

如果这些都没有问题,可以试试清除浏览器缓存,有时候浏览器自己也会搞些奇怪的事儿。希望这能帮到你,别再熬夜了。
点赞
2026-03-23 04:00