【问题标题】:HTTP notification using Socket.io error使用 Socket.io 错误的 HTTP 通知
【发布时间】:2018-07-11 02:50:44
【问题描述】:

这个想法是使用带有 http 的 VPS 上的 socket.io 和 node.js 服务器发送自定义通知 我可以使用在我的电脑上运行的网页连接到 VPS 但在我的域中我无法使用它,因为它被阻止了。

浏览器控制台弹出此错误:

阻止加载“http://151.236.63.10:3000/socket.io/?EIO=3&transport=polling&t=MI4R0M3”的活动混合内容

这是我的服务器端 node.js 服务器:

var app     =     require("express")();
//var mysql   =     require("mysql");
var http    =     require('http').Server(app);
var io      =     require("socket.io")(http);


io.on('connection',function(socket){  
    console.log("A user is connected");
    socket.on('add reserva',function(status){
    io.sockets.emit('update reserva', status);
    });
});


http.listen(3000,function(){
    console.log("Listening on 3000");
});

不知道我做错了什么,有人可以帮助我吗?

【问题讨论】:

  • 您在您的域上使用 HTTPS 吗?您连接到的 VPS 上的端点是否有 HTTPS?
  • 是的,域名有HTTPS,但没有VPS。

标签: javascript node.js


【解决方案1】:

您提到您的域使用的是 HTTPS,但不是您的 VPS。

由于您的域使用 HTTPS,并且现在您正尝试通过 HTTP 连接到您的服务器,因此您正在处理混合内容。

来自Google's Web Fundamentals Docs on Mixed Content

通过安全 HTTPS 加载初始 HTML 时会出现混合内容 连接,但其他资源(例如图像、视频、样式表、 脚本)通过不安全的 HTTP 连接加载。这就是所谓的 混合内容,因为 HTTP 和 HTTPS 内容都被加载到 显示相同的页面,并且初始请求通过 HTTPS 是安全的。

解决方案:

可以通过将您网站上的所有 http:// 链接替换为 https:// 来解决此问题。

所以这意味着您必须通过 HTTPS 而不是 HTTP 连接到您的 VPS。因此,您应该在您的服务器上启用 HTTPS/SSL 并通过 HTTPS 连接到它。

或者您可以在您的域上禁用 HTTPS 并仅使用 HTTP。

更多信息,请参考MDN Web Docs on fixing a website with blocked mixed content

【讨论】:

  • 我做了一些研究,我有点怀疑这是答案,但你还是给了我一个最终解决问题的想法!非常感谢!
  • 太棒了!我很高兴它有所帮助。
猜你喜欢
  • 2020-09-24
  • 2018-04-29
  • 2019-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多