首页 > 解决方案 > Chrome v88+ 和 Nestjs 服务器上的 socket-io 连接出现 CORS 错误

问题描述

我有一个连接到 Nestjs 服务器以建立 WS 连接的应用程序(服务器位于不同的 URL 上,因此它是一个 CORS 请求)。

WebsocketGateway 就是这样定义的。

@WebSocketGateway(port, {
  handlePreflightRequest: (req, res) => {
    const headers = {
      'Access-Control-Allow-Headers': 'Authorization',
      'Access-Control-Allow-Origin': 'the page origin',
      'Access-Control-Allow-Credentials': true,
    };
    res.writeHead(200, headers);
    res.end();
  }
})

在 Chrome v87 及以下版本和 Firefox 上运行起来就像一个魅力。自从将我的浏览器升级到 Chrome 88 后,前端 socket-io 连接进行了一个连接重新连接循环,如下所示:

  1. 预检请求通过并获得 200 响应,上面设置了标头;
  2. 实际连接失败并CORS error作为浏览器控制台中的唯一消息

标签: node.jswebsocketsocket.ionestjs

解决方案


以防其他人需要这个,在你的装饰器中有一个 cors 属性

@WebSocketGateway({ cors: true })

推荐阅读