Next.js 使用 Vercel 阻止 CORS

Next.js CORS blocking using Vercel

这不仅是一个问题,也是我费了好大劲才解决的问题的答案,我相信一些开发者会觉得它有用。

让我们从一些基本信息开始:​​

在本地主机上一切正常,但在部署时请求总是被 CORS 阻止。

服务器应用程序部署配置 (vercel.json) 如下:

{
  "version": 2,
  "builds": [
    {
      "src": "src/main.ts",
      "use": "@vercel/node"
    }
  ],
  "routes": [
    {
      "src": "/(.*)",
      "dest": "src/main.ts",
      "methods": [
        "GET",
        "POST",
        "PUT",
        "PATCH",
        "DELETE"
      ]
    }
  ]
}

在服务器应用程序中,我在 main.ts 文件中启用了 CORS:

app.enableCors({
    allowedHeaders: '*',
    origin: '*',
    credentials: true,
  });

使用我使用的任何客户端(NextJs、Angular 甚至 Insomnia 和 Postman)它表明 CORS 设置为接受任何来源,但它仍然阻止请求。

答案与 NextJs 或 NestJs 无关,仅与需要接受 OPTIONS 类型的 HTTP 请求的 vercel 部署配置有关,正确的 vercel.json 文件应如下所示:

{
  "version": 2,
  "builds": [
    {
      "src": "src/main.ts",
      "use": "@vercel/node"
    }
  ],
  "routes": [
    {
      "src": "/(.*)",
      "dest": "src/main.ts",
      "methods": [
        "GET",
        "POST",
        "PUT",
        "PATCH",
        "OPTIONS",
        "DELETE"
      ]
    }
  ]
}

不幸的是,我在查看的任何文档中都没有找到此信息,它只是在 CORS 机制中使用了 OPTIONS 类型的 HTTP 请求后才出现的。