Socket.io + Node.js跨域请求被阻止

我正在使用node和socket.io来编写一个聊天应用程序。 它在Chrome上工作正常,但Mozilla提供错误以启用跨源请求。

跨源请求被阻止:相同来源策略不允许阅读http://waleedahmad.kd.io:3000/socket.io/?EIO=2&transport=polling&t=1401964309289-2&sid=1OyDavRDf4WErI-VAAAI的远程资源。 这可以通过将资源移动到相同的域或启用CORS来解决。

这是我的代码来启动节点服务器。

var express = require('express'), app = express(), server = require('http').createServer(app), io = require('socket.io').listen(server), path = require('path'); server.listen(3000); app.get('/', function(req, res) { res.sendfile(__dirname + '/public/index.html'); }); 

在客户端。

 var socket = io.connect('//waleedahmad.kd.io:3000/'); 

HTML页面上的脚本标记。

 <script type="text/javascript" src="//waleedahmad.kd.io:3000/socket.io/socket.io.js"></script> 

我也在应用程序根目录中使用.htaccess文件。 (waleedahmad.kd.io/node)。

 Header add Access-Control-Allow-Origin "*" Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type" Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS" 

您可以尝试在服务器端设置origins选项以允许跨源请求:

 io.set('origins', 'http://yourdomain.com:80'); 

这里http://yourdomain.com:80是你想要允许请求的来源。

你可以在这里阅读更多关于origins格式

简单的服务器端修复

 var io = require('socket.io')(server, { origins: '*:*'}); 

要么

 io.set('origins', '*:*'); 

要么

 io.origins('*:*') // for latest version 

*独自行事,把我拉下了兔子洞。

这可能是Firefox的authentication问题,不一定是CORS有任何问题。 Firefox CORS请求提供“跨源请求被阻止”,尽pipe标题

我遇到了与Socketio和Nodejs在Firefox中抛出CORS错误一样的问题。 我有* .myNodeSite.com的Certs,但是我引用了Nodejs的局域网IP地址192.168.1.10。 (WAN IP地址也可能会引发相同的错误。)由于Cert与IP地址引用不匹配,Firefox会抛出该错误。