关于Vercel默认静态文件缓存策略的疑问
结论
这两处表述不存在本质冲突,你遗漏了Vercel对不同缓存层的差异化处理规则——默认配置下静态文件确实会被Vercel边缘节点自动缓存。
具体缓存逻辑
Vercel的缓存体系是完全独立的两层,两层对同一个Cache-Control头的处理规则并不一致:
- 终端浏览器/本地客户端层:这一层完全遵循标准HTTP协议语义,默认返回的
public, max-age=0, must-revalidate头就是面向这一层设计的,作用是强制客户端每次发起请求时都做资源校验,不在本地存储长期缓存,和静态文件缓存章节的描述完全匹配。 - Vercel边缘节点层:这一层属于Vercel内部网络,不会完全照搬标准HTTP缓存规则判断是否存储资源。只要是项目构建输出的静态产物——包括
public目录存放的图片、字体、静态文件,以及构建生成的JS、CSS等资源,首次被请求时边缘节点回源拿到内容后,就会自动将资源存储在当前边缘节点,完全不受返回给客户端的max-age=0指令影响。
边缘节点存储缓存后,后续收到对应资源请求时不会直接透传到源站,而是先通过内部维护的资源版本标识做校验:如果资源没有因为重新部署发生内容变更,就直接返回边缘节点存储的缓存内容,同时照样携带public, max-age=0, must-revalidate响应头返回给客户端;只有重新部署导致文件内容哈希变化、或者手动触发缓存刷新操作时,边缘节点才会清除旧缓存,回源拉取新版本资源。
容易忽略的规则说明
你大概率漏看了文档里关于边缘缓存的特殊规则:
Vercel为静态资源默认返回的
Cache-Control头仅作用于下游客户端(用户浏览器、第三方中间代理等),不约束Vercel内部边缘节点的缓存存储逻辑。
只有手动给静态资源配置Cache-Control: no-store响应头时,才会同时禁用边缘节点缓存和客户端缓存;其他场景下,无论你给静态资源设置的max-age值是多少,边缘节点都会默认缓存静态文件。
内容的提问来源于stack exchange,提问作者Joji
相关产品推荐
相关产品推荐

