node.js - 使用 HTTPS 的套接字 IO 和 Node 给出错误 net::ERR_INSECURE_RESPONSE

标签 node.js laravel express socket.io node-modules

我正在将 Socket IO 与 Node 和 Laravel 集成。

我已经完成了事件监听,但是当我将代码移动到 HTTPS 服务器时,出现了问题。

下面是错误消息:

GET https://205.186.144.231:3002/socket.io/?EIO=3&transport=polling&t=M2NyN1a net::ERR_INSECURE_RESPONSE

我在谷歌上搜索了许多解决方案,并进行了所有可能的更改,但没有一个对我有用。

以下是我的服务器端代码:

//socket.js

var https = require('https');

var io = require('socket.io')(https);
var fs = require('fs');

var Redis = require('ioredis');
var app = require('express')();

var redis = new Redis();

redis.subscribe('chatMessage');

var options = {
  ca: fs.readFileSync('./public/The_CA_bundle.pem'),
  key: fs.readFileSync('./public/mazau.key'),
  cert: fs.readFileSync('./public/mazau.cert'),
};

redis.on('message', function (channel, message) {
    console.log(channel + ' ' + message);
  });

https.createServer(options, app).listen(3002, '205.186.144.231');
console.log('Server running at 205.186.144.231:3002/');

在客户端我完成了以下代码: //客户端

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Socket</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.4/socket.io.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
    <script src="{{ asset('my_socket.js') }}"></script>
</head>
<body>
    <script>
        var socket = io('https://205.186.144.231:3002');    
    </script>
</body>
</html>

我通过键入 Node 套接字来运行服务器

我不知道我错过了什么。至少有一个帮助将不胜感激。 谢谢

enter image description here

最佳答案

我也遇到过同样的问题。下面我提到解决我的问题的步骤:

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

var hskey = fs.readFileSync('certs/pri.key');
var hscert = fs.readFileSync('certs/cert.crt');
var ca = fs.readFileSync('certs/ca.crt');

var credentials = {
    ca:ca,
    key: hskey,
    cert: hscert,
    requestCert: false,
    rejectUnauthorized: false
};

var http = https.createServer(credentials,app);

根据您的情况,请检查 key 和证书文件的路径是否正确。就我而言,我创建了一个服务器 js 文件所在的文件夹,并将证书、 key 和 ca 文件放入其中。

然后在您的客户端,尝试提供域名而不是 IP 地址,如

var socket = io("https://www.yourdomain.com:3002", {secure: true});

重新启动 Node 服务器并检查它。

关于node.js - 使用 HTTPS 的套接字 IO 和 Node 给出错误 net::ERR_INSECURE_RESPONSE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47992505/

相关文章:

node.js - ASIHttpRequest/node.js/heroku : "Client closed connection before receiving entire response"

php - MySQL 看起来不错,但 Laravel 不喜欢它

php - 从 Laravel 中的验证器发送自定义响应

javascript - .find() 不是 mongoose + nodejs 中的函数

node.js - Express 中的响应流在 Azure 应用服务中不起作用

javascript - Strapi 上传的文件未显示在网站上

javascript - React Native 启动失败,错误代码 -4094 如何解决这个 ONCE for ALL?

javascript - Express js 在渲染 View 之前操作数据

javascript - 防止函数名称在缩小时被破坏

php - Laravel 有时验证规则