带有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);