【问题标题】:Vercel cache CORS headers issue for multiple domains多个域的 Vercel 缓存 CORS 标头问题
【发布时间】:2021-12-29 06:47:36
【问题描述】:

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

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

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

【问题讨论】:

    标签: caching next.js cors vercel http-status-code-304


    【解决方案1】:

    据我了解,问题在于 Vercel 未在缓存键中包含请求的来源,因此您会意外得到 Web cache poisoning。不幸的是,Vercel doesn't seem to allow custom cache keys 还没有。

    一个长期的解决方案是向 Vercel 施加压力,让他们将来源添加到他们的缓存键中;这是 Cloudflare 等其他 CDN 采用的合理默认设置。另一种短期解决方案是根据Vercel caching rules 使您对 CORS 请求的响应不可缓存:

    {
      "name": "foo",
      "version": 2,
      "routes": [
        {
          "src": "/whatever",
          "headers": [
            { key: "Cache-Control", value: "no-cache" },
            ...
          ]
        }
      ],
      ...
    }
    

    【讨论】:

    • 感谢您的编辑和回复。目前我强迫客户不要使用If-None-Match。我会要求 Vercel 对此提供支持。奇怪的一件事是在发出请求时有一个authorization 标头,因此理论上 Vercel 不应该缓存它们。也许问题出在其他地方。
    • 确实很奇怪...... Vercel 和客户端之间存在另一个缓存,或者 Vercel 关于其缓存规则的文档不正确。
    猜你喜欢
    • 2020-12-29
    • 2011-09-01
    • 2021-03-19
    • 2017-09-26
    • 1970-01-01
    • 2019-08-13
    • 2017-12-11
    • 2021-07-21
    • 2021-10-20
    相关资源
    最近更新 更多