多个域的 Vercel 缓存 CORS headers 问题

Vercel cache CORS headers issue for multiple domains

我在 Vercel 上部署了 Next.js API。 API 被多个其他域使用。

当浏览器发送 If-None-Match header 时,Vercel 可以回复 304;但是,Access-Control-Allow-Origin header 可能包含不同的来源,这会导致 CORS 错误。我想这是因为 Vercel 从缓存的响应中发送了 headers。

如何确保在 Access-Control-Allow-Origin header 中指定正确的原始值? 我想我可以为每个使用 API 的域添加一些代理,但我宁愿避免这种情况。

据我了解,问题是 Vercel 没有在缓存键中包含请求的来源,而你得到的是意外 Web cache poisoning. Unfortunately, Vercel doesn't seem to allow custom cache keys

一个长期的解决方案是向 Vercel 施加压力,让他们将来源添加到他们的缓存键中;这是其他 CDN(例如 Cloudflare)采用的合理默认设置。另一种短期解决方案是根据 Vercel caching rules:

使您对 CORS 请求的响应不可缓存
{
  "name": "foo",
  "version": 2,
  "routes": [
    {
      "src": "/whatever",
      "headers": [
        { key: "Cache-Control", value: "no-cache" },
        ...
      ]
    }
  ],
  ...
}