socket.io + ssl - Access-Control-Allow-Origin不允许使用Origin

时间:2014-12-02 09:49:29

标签: node.js ssl socket.io access-control

我用socket.io v1.2.1构建我的项目,它在http连接上运行良好。

但是当我将我的网站更改为ssl连接时,错误就会到来。

XMLHttpRequest cannot load 
https://pusher.mydomain.com:8080/socket.io/?EIO=3&transport=polling&t=1417509725164-0. 
No 'Access-Control-Allow-Origin' header is present on the requested resource. 
Origin 'https://other.mydomain.com' is therefore not allowed access. 

" puhser.mydomain.com"是提供io服务的服务器," other.mydomain.com"作为推动者的客户运行。

以下是IO服务器的代码:

var express = require('express');
var app = express();
var http = require('https');
var fs = require('fs');
var key = fs.readFileSync('./server.key').toString();
var cert = fs.readFileSync('./server.crt').toString();
var https_options = {
   key: key,
   cert: cert
};
http.createServer(https_options, app).listen(8080, function() {
   console.log('Listening 8080');
});
var io = require('socket.io')(http);
io.sockets.on('connection',function(socket){
    console.log(socket.id);
    //...
});
//...

并且,客户端连接到服务器,如下所示:

var io = io.connect('https://pusher.mydomain.com:8080');
iosocket.on('connect',function(){
   //...
});

然后,错误来了。

我尝试了很多方法,但没有帮助。上帝保佑我!

@ jfriend00:谢谢你。网站的域/端口是不同的。 我试过这个: app.use(function(req, res, next) { res.header("Access-Control-Allow-Origin", "https://other.mydomain.com"); res.header("Access-Control-Allow-Credentials", true); res.header("Access-Control-Allow-Headers", "X-Requested-With"); res.header("Access-Control-Allow-Headers", "Content-Type"); res.header("Access-Control-Allow-Methods", "PUT, GET, POST, DELETE, OPTIONS"); next(); });

然后错误消失,但无法构建IO连接,我从IO服务器获得404。

答案:

socket.io上的ssl连接尚未以正确的方式构建。 我用以下方法解决了这个问题:

//...
var https = require('https').createServer(https_options,app);
var io = require('socket.io').listen(https);
// io connection code ...

https.listen(8080);
//...

一切都运作良好。

0 个答案:

没有答案