我用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);
//...
一切都运作良好。