-1

我正在制作一个应用程序,其中有一个节点后端和一个角度前端。

我正在使用 socket.IO 在我的客户端和服务器之间进行通信。

我正面临 CORS 问题,我将其解决(尝试)为:

const io: SocketIOServer = new SocketIOServer(server, {
  cors: {
    origin: true
  }
}); // only for development

但是,从我的客户端应用程序(在另一个端口运行)提出请求后,我仍然遇到了 CORS 问题。

所以我去了我的终端,并用 curl 提出了一个请求,如下所示

me@Desktop:~$ curl "http://127.0.0.1:5000/socket.io/?EIO=4&transport=polling&t=NV5sBAn"
0{"sid":"jAhPIEEkdy8EY8I_AAAD","upgrades":["websocket"],"pingInterval":25000,"pingTimeout":5000}

这表明我 curl 能够访问服务器,并且没有面临 CORS 问题。

在我的客户端中,我试图连接到我的服务器:

socket = io.connect('http://locahost:5000'); // server running at port 5000

帮助我解决我的问题,以便我可以连接到我的服务器。

另附注:如果应用程序中 server.io 的版本为 3,则对服务器的 curl 请求也会失败。只有在 server.io 版本 4 上,curl 请求才会通过。

如果有帮助,Firefox中的错误:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://locahost:5000/socket.io/?EIO=4&transport=polling&t=NV5vi1_. (Reason: CORS request did not succeed).

编辑:我的问题是无法使用客户端连接到服务器。我展示了 curl,因为它是在 socket.io cors 配置网页中建议的。

4

3 回答 3

1

因为 socket.io 使用普通的 http 请求发起连接,所以它受 CORs 限制。CURL 不强制 CORs 限制(就像浏览器一样),所以这就是为什么你在那里看不到它。

你有几个选择:

  1. 您可以在您的服务器中启用此特定的 COR 请求以允许它。
  2. 您可以{transports: ['websocket']}在启动连接的 socket.io 客户端代码中为您的 socket.io 连接指定选项。这将告诉 socket.io 立即从不受 COR 约束的 webSocket 连接开始。
于 2021-02-21T19:18:26.203 回答
0

Curl 没有实现 CORS 安全限制,因此它始终能够连接。您的前端和后端有不同的端口,这些端口被认为是不同的 CORS 来源。因此,您要么需要在服务器上正确设置允许的来源,并确保它处理飞行前请求,要么让进程为您的前端代理请求提供后端服务,以便从浏览器的角度来看,一切都在同一个 url 上

于 2021-02-21T19:06:06.380 回答
-1

显然,问题是:

 socket = io.connect('http://localhost:5000');

将其更改为:

 socket = io.connect('http://127.0.0.1:5000');

工作!我不知道为什么这个名字没有得到解决!

于 2021-02-22T05:20:41.907 回答