带有ssl和Access-Control-Header的socket.io / node.js

我设置了一个节点服务器,并在激活ssl(官方,非自行分配的证书)时收到错误消息。

错误消息:

XMLHttpRequest cannot load https://servername:8081/socket.io/... No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://servername' is therefore not allowed access. results:1 

但实际上,我在.htaccess文件中包含了以下代码:

 <IfModule mod_headers.c> Header set Access-Control-Allow-Origin * Header set Access-Control-Allow-Methods: "GET,POST,OPTIONS,DELETE,PUT" </IfModule> 

apache标题模块被安装。

我的服务器:

 var fs = require('fs'); var https = require('https'); var express = require ('express'); var options = { key: fs.readFileSync('path to key'), cert: fs.readFileSync('path to cert'), ca: fs.readFileSync('path to ca') }; app = express() https.createServer(options,app).listen(8081) var io = require('socket.io')(https); io.sockets.on('connection', function (socket) { ... } 

我的客户:

 <script language="JavaScript"> var socket = io.connect('https://servername:8081'); socket.emit(...); </script> 

有人有什么想法吗? 提前致谢!

好的,我在这里看到一些事情:

  • 你需要在你的客户端包含socket.io lib(对不起,找不到“脚本”标签显示的方式,请编辑任何人):

     script src="https://servername:8081/socket.io/socket.io.js"
    script src="https://servername:8081/socket.io/socket.io.js" 
  • 将安全参数设置为true( 在您的客户端中

     var socket = io.connect('https ://servername:8081', {secure: true}); 
  • 并将这些行添加到您的SSL选项:

     agent: false, requestCert: true, rejectUnauthorized: false 
  • 那么如果它仍然无法工作,你可以尝试使用以下设置你的服务器

    io.set('match origin protocol', true);