netty socket io CORS 错误:Access-Control-Allow-Origin

Posted

技术标签:

【中文标题】netty socket io CORS 错误:Access-Control-Allow-Origin【英文标题】:netty socket io CORS error: Access-Control-Allow-Origin 【发布时间】:2015-08-17 14:58:51 【问题描述】:

我有运行 https 的 wamp 服务器、受 SSL 保护的 java netty socket.io 服务器和 socket.io 客户端。

在客户端我有以下代码:

io.connect(url, secure: true );

网址是:https://127.0.0.1:8080

当我在浏览器中打开我的网络服务器时:https://127.0.0.1 我有以下错误:

socket.io-client:manager reconnect attempt error +1ms
socket.io.js (wiersz 1284)
socket.io-client:manager will wait 4000ms before reconnect attempt +1ms
socket.io.js (wiersz 1284)
engine.io-client:socket socket close with reason: "transport error" +3ms
socket.io.js (wiersz 3524)
engine.io-client:polling transport not open - deferring close +1ms
socket.io.js (wiersz 3524)
socket.io-client:manager attempting reconnect +4s
socket.io.js (wiersz 1284) 
socket.io-client:manager readyState closed +3ms
socket.io.js (wiersz 1284)
socket.io-client:manager opening https://127.0.0.1:8080 +5ms
socket.io.js (wiersz 1284)
engine.io-client:socket creating transport "polling" +4s
socket.io.js (wiersz 3524)
engine.io-client:polling polling +5ms
socket.io.js (wiersz 3524)
engine.io-client:polling-xhr xhr poll +4ms 
socket.io.js (wiersz 3524)
engine.io-client:polling-xhr xhr open GET:           https://127.0.0.1:8080/socket.io/?EIO=3&transport=polling&t=1433329575886-4 +4ms
socket.io.js (wiersz 3524)
engine.io-client:polling-xhr xhr data null +6ms
socket.io.js (wiersz 3524)
GET https://127.0.0.1:8080/socket.io/?   EIO=3&transport=polling&t=1433329575886-4

    37ms    
socket.io.js (wiersz 2739)
engine.io-client:socket setting transport polling +13ms
socket.io.js (wiersz 3524)
socket.io-client:manager connect attempt will timeout after 20000 +42ms
socket.io.js (wiersz 1284)
Zablokowano żądanie do zasobu innego pochodzenia: zasady „Same Origin   Policy” nie pozwalają wczytywać zdalnych zasobów z    „https://127.0.0.1:8080/socket.io/?EIO=3&transport=polling&t=1433329575886-  4”. (nieudane żądanie CORS)
engine.io-client:socket socket error      "type":"TransportError","description":0 +151ms
 socket.io.js (wiersz 3524)
 socket.io-client:manager connect_error +145ms

我不知道此错误的原因...客户端、服务器或 javascript 上的错误正在阻止某些东西?

我的错误是波兰语,但英语是这样的:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost:8008/socket.io/1/?t=1399898337175. This can be fixed by moving the resource to the same domain or enabling CORS.

但是我的资源在同一个域上。

你知道如何解决这个问题吗? 我读到在标题中添加“Access-Control-Allow-Origin”可以解决这个问题。如何将其添加到 netty java socket.io 实现中?

编辑:

我添加到标题:Access-Control-Allow-Origin: "*" 仍然出现错误

【问题讨论】:

【参考方案1】:

我对 NettySocketIO 有同样的问题。解决方案是更改 NettySocketio 服务器配置。问题是您的 NettySocketIO 服务器和您的 Web 服务器(托管您的 html 网页的地方)位于不同的域中,您需要将 Web 服务器 URL 添加到您的 NettySocketIO 服务器。

这是我的代码

Configuration _config = new Configuration();

Socketioserver _server;

public void InitServer()

    _config.setHostname("MYNettyWebSocketSever");
    _config.setPort(9092);
    _config.setOrigin("http://WebServerHost:WebServerPort");  // or http://domain.com

    _server = new SocketIOServer(_config);
    _server.addEventListener("chatevent", ComPacket.class, (socketIOClient, comPacket, ackRequest) -> _server.getBroadcastOperations().sendEvent("chatevent", comPacket));


public void StartServer()
    _server.start();

请注意,您需要托管您的 HTML 页面,仅通过双击打开 HTML 页面是行不通的。

如果您没有得到任何东西,请发表评论。

【讨论】:

【参考方案2】:

我拥有自签名 SSL 证书,但我的浏览器阻止了以下请求: https://127.0.0.1:8080/socket.io/?EIO=3&transport=polling&t=1433329575886-4

所以我在浏览器中输入:https://127.0.0.1:8080/socket.io/?EIO=3&transport=polling&t=1433329575886-4 我接受了自签名证书,并且成功了。

在普通的 SSL 证书上,一切都是开箱即用的。

我也有类似 _config.setOrigin("http://WebServerHost:WebServerPort");

所以浏览器阻止 SSL 是原因。

【讨论】:

以上是关于netty socket io CORS 错误:Access-Control-Allow-Origin的主要内容,如果未能解决你的问题,请参考以下文章

使用 Nginx 的 socket.io 出现 CORS 错误

Socket.io Express Http-Server 后端,CORS 错误

在 Firefox 中运行 node.js 和 socket.io 时出现 CORS 错误

即使我在服务器上允许它,Socket.io 也会出现 CORS 错误

Chrome v88+ 和 Nestjs 服务器上的 socket-io 连接出现 CORS 错误

由于 CORS 错误,Socket.io 和 express 应用程序无法连接:“'Access-Control-Allow-Origin' 标头的值不能是通配符 '*'”