https://www.example.com 和 https://example.com socket.io 连接问题

https://www.example.com and https://example.com socket.io connection problem

如何让两个 https://example.com and https://www.example.com 端点连接? socket.io 在 https://example.com 连接没问题 但不是 https://www.example.com

我的服务器看起来像

const server = http.createServer(app);
const io = socketIo(server, {
  cors: {
    origin: "https://www.example.com:3000",
    methods: ["GET", "POST"],
    allowedHeaders: ["my-custom-header"],
    credentials: true
  }});

我的客户端端点如下所示

const ENDPOINT = 'https://example.com/';

配置您的 DNS 以将 example.com 和 www.example.com 指向同一主机 IP 地址,然后使用您的 cors 配置支持这两个域。然后,URL 将转到同一主机。

如果您将 socket.io 配置为使用 webSocket 立即启动,而不是通常启动的 http 轮询,则可以完全避免 cors。您可以通过将 transports: ['websocket'] 选项添加到客户端连接来在客户端中执行此操作。

而且,您的自定义 header 可能会阻止 COR 并需要 pre-flight 许可。 CORs 有两个级别,简单和 not-simple。当您添加自定义 header 时,您会强制 COR 进入需要预检的 not-simple 路由,这可能比 built-in socketio cors 功能将处理的更多。