node.js - Firefox 无法建立 websocket 连接,而 Chrome 可以

标签 node.js firefox ssl websocket

我正在开发一个网络应用程序,我正在包括网络套接字连接。我已经安装了带有 node.js (5.0.0) 和 websocket ( https://www.npmjs.com/package/websocket ) 的 websocket 服务器。

在 Chrome 中,它运行完美,但在 Firefox 中,此消息出现在控制台中:

Firefox no puede establecer una conexión con el servidor en wss://www.my-dev-server.com:1337/.

(Firefox 无法与服务器建立连接...)

这是服务器代码(基本上与示例中一样):

var WebSocketServer = require('websocket').server;

var https = require('https');
var fs = require('fs');

var options = {
  key: fs.readFileSync('/keyfile.key'),
  cert: fs.readFileSync('/pemfile.pem')
};
var port = 1337; 

// Create HTTPS service.
var server = https.createServer(options, function(request, response) {
    console.log((new Date()) + ' Received request for ' + request.url);
    response.writeHead(404);
    response.end();
});     

server.listen(port, function() {
    console.log((new Date()) + ' Server is listening on port ' + port);
});

// create the server
wsServer = new WebSocketServer({
    httpServer: server,
    autoAcceptConnections: false
});

function originIsAllowed( origin ) {
    // TODO: complete
    return true;
}

var clients = [];

// WebSocket server
wsServer.on('request', function(request) {

    if( !originIsAllowed( request.origin ) ) {
        request.reject();
        console.log((new Date()) + ' Connection from origin ' + request.origin + 'rejected.');
        return;
    }
    console.log((new Date()) + ' Connection accepted from ' + request.origin + '.');

    var connection = request.accept(null, request.origin);
    clients.push(connection);

    connection.on('message', function( message ) {
        if (message.type === 'utf8') {
            console.log('Received Message: ' + message.utf8Data);
        }
        else if( message.type === 'binary' ) {

        }
    });

    connection.on( 'error', function( error ) {
    });

    connection.on('close', function( reasonCode, description ) {
        console.log((new Date()) + " Peer " + connection.remoteAddress + " disconnected.");
    });
});

我出于开发目的使用自签名证书,与 Web 服务器使用的相同。

这是我的客户端代码:

var connection = new WebSocket('wss://www.my-dev-server.com:1337');

connection.onopen = function () { };

connection.onerror = function (error) { };

connection.onmessage = function (message) {
    /* some code here */
};

最佳答案

我终于找到了解决方案。

问题是对于 https 连接,在端口 443 中,Firefox 已经存储了未知证书的异常,而它需要 wss 的另一个异常(在本例中为端口 1337)。

我在高级首选项中为此端口添加了一个证书异常(exception),现在工作正常。

关于node.js - Firefox 无法建立 websocket 连接,而 Chrome 可以,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33591699/

相关文章:

node.js - npm - 如何在 npm 中设置 max-old-space-size

html - 如何在 Firefox 中为掩码设置自定义位置?

node.js 我可以为同一个项目使用多个 ssl 证书和 key 吗?如何使用?

node.js - Node JS请求获取原始url

node.js - 为什么 createCipheriv 和 createDecipheriv 不能在单独的函数中工作 - crypto

mysql - Node.js 服务器是否应该与 mysql 实例有一个连接?

html - FF 显示不需要的边框

javascript - Firefox 未在服务 worker 中为推送消息打开窗口

python - 在 Python twisted 中创建受控的 TLS 对话并将其存储以用作测试数据

amazon-web-services - 创建 CA 证书时 AWS 中的 ValidationException