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会抛出该错误。