所以我一直在使用socket.io和NodeJS很长一段时间,但我从未试图在安全的套接字层上使用socket.io。
最近我一直试图让它与有效证书一起使用。但是,每次我尝试连接到socket.io服务器时,chrome控制台中都会显示以下错误消息;
XMLHttpRequest cannot load domain:12457/socket.io/1/?t=1403871407291. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'domain' is therefore not allowed access.
据我所知,域必须位于Access-Control-Allow-Origin标头中。我已使用以下代码将该特定标头添加到HTTPS服务器;
var https = require ('https');
var fs = require ('fs');
var options = {
key: fs.readFileSync('./cert/private.key'),
cert: fs.readFileSync('./cert/certificate.crt'),
//requestCert: true,
ca: [ fs.readFileSync('./cert/ca.pem'), fs.readFileSync('./cert/sub.class1.server.ca.pem') ]
};
var server = https.createServer (options, function (req, res) {
res.setHeader("Access-Control-Allow-Origin", "domain");
res.writeHead (200);
res.end ("Nothing to see here :o");
});
var socketio = require ('socket.io').listen (server);
server.listen (12457);
当我运行添加了Access-Control-Allow-Origin的服务器时,我收到同样的错误。但是,当我使用单独的GET请求请求标头时,我会收到以下内容:
HTTP/1.1 200 OK =>
Access-Control-Allow-Origin => domain
Date => Fri, 27 Jun 2014 12:18:45 GMT
Connection => close
请注意,此次使用正确的域设置了Access-Control-Allow-Origin。
我不知何故感觉HTTPS服务器正在为自己的HTTPS服务器设置标头,但对于socket.io服务器则没有。我不知道如何解决这个问题,所以我的问题是;
有人知道我做错了吗?