Vercel CDN 不再缓存 Vary 头包含 Cookie 的响应

Vercel CDN 不再缓存 Vary 头包含 Cookie 的响应

💡 原文英文,约200词,阅读约需1分钟。
📝

内容提要

Vercel CDN 不再缓存 Vary 头包含 Cookie 的源站响应,因为 Cookie 值多样会导致缓存条目过多且难以复用。响应仍正常返回,但不会被存储。可通过 x-vercel-cache 为 MISS 及日志中的 vary_key_denied:cookie 识别。若响应与 Cookie 无关,应移除 Vary 中的 Cookie;若依赖 Cookie,则保留并设置 Cache-Control: private。其他 Vary 头的缓存行为不变。

🔎

延伸解读

为何 Vary 包含 Cookie 会导致缓存失效

Vary 头用于告知缓存哪些请求头的变化会影响响应。Cookie 通常包含访客特定值,若 Vary 包含 Cookie,每个不同的 Cookie 值都会生成独立的缓存条目,导致缓存条目数量激增且复用率极低。因此 Vercel CDN 不再缓存此类响应,以避免存储大量几乎不会被再次命中的缓存。

如何识别受影响的响应

当源站响应因 Vary 包含 Cookie 而未被缓存时,响应头 x-vercel-cache 会显示为 MISS,同时运行时日志中会出现 vary_key_denied:cookie 作为缓存原因。如果你预期某个路由应被缓存,却看到这些标识,就说明该响应因 Vary 中的 Cookie 被拒绝缓存。

针对不同场景的调整建议

若响应内容与 Cookie 无关,应从 Vary 头中移除 Cookie,这样 Vercel CDN 在满足其他缓存条件时即可缓存该响应。若响应确实依赖 Cookie 提供个性化内容,则应保留 Vary 中的 Cookie,并设置 Cache-Control: private,以防止个性化响应被共享 CDN 缓存存储。其他 Vary 头的缓存行为保持不变。

❓

Q&A

Vercel CDN 现在对 Vary 头包含 Cookie 的响应如何处理?

Vercel CDN 不再缓存这类响应,但响应仍会正常返回给用户,只是不会被存储以供后续请求复用。

为什么 Vercel CDN 不再缓存 Vary 包含 Cookie 的响应?

因为 Cookie 通常包含访客特定的值,按 Cookie 变化会导致缓存条目过多且很少被复用。

如何判断一个响应是否因为 Vary 包含 Cookie 而未被 Vercel CDN 缓存?

可以检查响应头中的 x-vercel-cache 是否为 MISS,并在 Runtime Logs 中查看缓存原因是否显示 vary_key_denied:cookie。

如果我的响应与 Cookie 无关,但 Vary 头里包含了 Cookie,应该怎么调整?

应该从 Vary 头中移除 Cookie,这样 Vercel CDN 在满足其他缓存条件时就能缓存该响应。

如果响应确实依赖 Cookie,如何防止个性化内容被 Vercel CDN 缓存?

保留 Vary 中的 Cookie,并设置 Cache-Control: private,这样个性化响应就不会被共享 CDN 缓存存储。

Vercel CDN 对其他 Vary 头的缓存行为有变化吗?

没有变化,其他受支持的 Vary 头的缓存行为保持不变。

🏷️

标签

➡️

继续阅读