【问题标题】:socket.io origin set but anyways getting errorssocket.io 原始集,但无论如何都会出错
【发布时间】:2022-10-26 03:44:06
【问题描述】:

我正在为一个学校项目制作一个网站,其中有一个实时更新表,其中包含有关玩家跑了多少轮的数据。 它几乎完成了,但我遇到了一个错误,我无法解决:

ccess to XMLHttpRequest at 'https://creeperhd.de:8443/socket.io/?EIO=4&transport=polling&t=O88eQ0_' from origin 'https://creeperhd.de' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

我的服务器代码中已经有这个以防止出现此错误:

const io = require('socket.io')(http,{cors:{origin:"*"}});

但我还是得到了同样的错误......

有人能告诉我能做什么吗?

【问题讨论】:

  • 您的服务器上是否还安装了 CORS 包?如果是这样,请显示该代码。如果没有,那么 socket.io 的 cors 选项将不会自行执行任何操作。
  • 哦,我想我们有问题,因为我没有安装它,我如何安装和使用它?
  • 您可以先阅读:socket.io/docs/v4/handling-cors
  • 如果您控制 socket.io 连接的客户端,您还可以通过在客户端中添加 {transports: ['websocket']} 作为连接选项来完全消除 CORS 问题。这将跳过连接的 socket.io 默认 http 轮询阶段并避免所有 CORS 问题。有关transports 选项here 的信息,请参阅文档。
  • 好的,非常感谢,但现在我收到此错误:

标签: javascript node.js ssl socket.io


【解决方案1】:

您将需要执行以下两项操作之一来启用 CORS 支持或绕过 CORS 限制。

选项1:通过更改客户端连接代码以添加如下选项,将客户端更改为跳过 socket.io http 轮询:

const socket = io("https://example.com", {
  transports: ["websocket"] // use webSocket only
});

最初的 socket.io http 轮询会因 COR 限制而绊倒。如果您跳过它并直接进入 webSocket 连接,那么 webSocket 连接不受 COR 限制,因此您不会遇到 COR 访问问题。

选项#2:在您的 http 服务器上安装 CORS 包并对其进行适当配置以启用对 socket.io 端点的 CORS 访问。 CORs 页面是here。启用 CORS 访问的 socket.io 文档是 here

为 socket.io 显示的 cors 选项取决于您的 Web 服务器上安装的 CORS 包。因此,您必须同时使用这两者或实现您自己的自定义 COR 处理以完全启用 COR 访问。

【讨论】:

  • 选项#2 几乎做到了!但现在我收到一个错误,即与 wss://<my domain:port> 的连接失败。我想那是因为网站使用 https 你知道如何解决这个问题吗?
  • @HackerHK - 我们不知道您的站点配置,也看不到任何相关的客户端连接代码和 Web 服务器代码来帮助您调试。
【解决方案2】:

我有同样的问题,但我按照以下步骤解决了

在服务器端代码中更新您的连接并允许 cors 来源 *

io = require('socket.io')(httpServer , { cors:{origin:'*'}})

【讨论】:

    猜你喜欢
    • 2023-02-25
    • 2018-03-26
    • 2010-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-22
    • 2020-10-11
    相关资源
    最近更新 更多