多个域的 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" },
...
]
}
],
...
}
我在 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" },
...
]
}
],
...
}