问题描述
我觉得我已经用尽了所有相关的帖子和解决方案,没有解决方案,也没有解决我所看到的确切问题(尽管很多非常相似)。
简而言之,我有一个非常简单的NodeJS socket.io发射器和客户端示例。 当客户端网页与nodeJS socket.io发射器应用程序托管在同一主机上时,它将按预期运行。从任何其他主机执行的同一客户端网页也会出现相同的问题。
基本上,我会收到如下连续消息;
myfile
我将在下面解释详细信息,但是我相信吸烟者是该请求的IP地址/主机已更改为承载客户端网页的主机。
在同一主机(192.168.0.35)上运行时,我获得以下成功;
404 [XHR] http://192.168.0.41/socket.io/?EIO=3&transport=polling&t=NGc5_Pg
远程运行时,该IP地址现在是网页服务器的主机! (我确定有一些简单的原因导致我不明白) 为什么请求IP现在是.41而不是.35?
这是两个测试的更完整比较;
工作:客户端页面与节点发射器充当同一主机
200 [XHR] http://192.168.0.35:3000/socket.io/?EIO=3&transport=polling&t=NGc1BqD
101 [WebSocket] ws://192.168.0.35:3000/socket.io/?EIO=3&transport=websocket&sid=jIxHFTv6eoIXXGiRAAAH
200 [XHR] http://192.168.0.35:3000/socket.io/?EIO=3&transport=polling&t=NGc1Bqi&sid=jIxHFTv6eoIXXGiRAAAH
失败:客户端页面为其他任何主机提供服务
200 [XHR] http://192.168.0.35:3000/socket.io/socket.io.js Content-Type: application/javascript
200 [XHR] http://192.168.0.35:3000/socket.io/?EIO=3&transport=polling&t=NGc1BqD Content-Type: text/plain; charset=UTF-8
101 [WebSocket] ws://192.168.0.35:3000/socket.io/?EIO=3&transport=websocket&sid=jIxHFTv6eoIXXGiRAAAH Content-Type: text/plain; charset=UTF-8
200 [XHR] http://192.168.0.35:3000/socket.io/?EIO=3&transport=polling&t=NGc1Bqi&sid=jIxHFTv6eoIXXGiRAAAH Content-Type: text/plain; charset=UTF-8
请注意,端口3000已打开,并且已成功为socket.io.js提供服务。 同样,托管客户端网页(nginx,节点等)的托管似乎也没有关系
当远程运行时,我没有看到任何CORS或XSS错误-我认为这是有道理的-因为请求已更改为本地IP /域?
如果能帮助我了解无法理解的地方或缺少的东西,我将不胜感激!
这是代码;
节点testsockets.js
200 [script] http://192.168.0.35:3000/socket.io/socket.io.js Content-Type: application/javascript
404 [XHR] http://192.168.0.41/socket.io/?EIO=3&transport=polling&t=NGc5_Pg
404 [XHR] http://192.168.0.41/socket.io/?EIO=3&transport=polling&t=NGc61sS
404 [XHR] http://192.168.0.41/socket.io/?EIO=3&transport=polling&t=NGc5_l5
...
...
... infinity
客户端HTML页面
app.use(function(req,res,next) {
res.setHeader("Access-Control-Allow-Origin","*");
res.setHeader("Access-Control-Allow-Headers","X-Requested-With");
res.setHeader("Access-Control-Allow-Headers","Content-Type");
res.setHeader("Access-Control-Allow-Methods","PUT,GET,POST,PATCH,DELETE,OPTIONS");
res.setHeader('Access-Control-Allow-Credentials',false);
res.setHeader("Content-Security-Policy","script-src 'self'");
next();
});
var options = {
allowUpgrades: true,transports: ['websocket','file','htmlfile','xhr-polling','jsonp-polling','polling'],pingTimeout: 9000,pingInterval: 3000,httpCompression: true,origins: '*:*'
};
var http = require('http').createServer(app);
var io = require('socket.io')(http,options);
app.use(bodyParser.json());
app.use(express.static('public'));
sub_client.subscribe('datahub.tsv.environment');
sub_client.on("message",function(channel,message){
io.emit('event message',message);
console.log("redis subscription message: " + JSON.stringify(message));
});
http.listen(3000,'192.168.0.35',() => {
console.log('dataHUB NodeJS Redis Subscriber listening on *:3000');
});
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)