【问题标题】:socket.io / node.js with ssl and Access-Control-Header带有 ssl 和 Access-Control-Header 的 socket.io / node.js
【发布时间】:2014-11-29 12:16:51
【问题描述】:

我设置了一个节点服务器并在激活 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>

有人知道这里出了什么问题吗?提前致谢!

【问题讨论】:

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


    【解决方案1】:

    好的,我在这里看到了一些东西:

    • 您需要将 socket.io 库包含在您的客户端中,如下所示:

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

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

      agent: false, 
      requestCert: true,
      rejectUnauthorized: false
      
    • 如果还是不行,你可以尝试设置你的服务器,使用:

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

    【讨论】:

    • 感谢您的回复。它越来越好,但现在我收到错误“[blocked] 'servername' 的页面是通过 HTTPS 加载的,但是从 'ws://servername/socket.io/?EIO=3&transport=websocket&sid= HXfZn3PhvDcimhztAAAC':此内容也应通过 HTTPS 加载。socket.io.js:4519 Uncaught SecurityError:无法构造“WebSocket”:可能无法从通过 HTTPS 加载的页面启动不安全的 WebSocket 连接。
    • AND:启动节点服务器时,它说:“选项匹配原始协议无效。请参阅自述文件。”
    猜你喜欢
    • 2016-06-06
    • 2011-09-29
    • 2017-07-27
    • 2015-04-01
    • 2013-05-27
    • 1970-01-01
    • 1970-01-01
    • 2012-07-27
    • 2017-06-13
    相关资源
    最近更新 更多