通过letsencrypt设置https后,Nodejs聊天程序'io未定义'错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过letsencrypt设置https后,Nodejs聊天程序'io未定义'错误相关的知识,希望对你有一定的参考价值。

我在我的网站上设置了一个nodejs聊天程序。

然后,当我使用letsencrypt将网站从http移至https时,聊天程序停止工作。

这是服务器和客户端: https://synodins.com/apps/chat/server.js https://synodins.com/apps/chat/client.html 并直接读取客户端脚本: https://synodins.com/apps/chat/client.txt

问题是,你可以在客户端上看到inspect元素,就是我得到了错误: ReferenceError:未定义io

我已经搜索过这个错误,发现: socket.io - ReferenceError: io is not defined 但我已经按照他在答案中建议的方式做事。

我不确定问题是什么,虽然我怀疑在客户端加载socket.io模块有问题。

有趣的是,我可以毫无问题地在我的localhost上运行聊天,但是当我尝试在服务器上运行它时,我得到了这个错误。

谁能看出问题是什么?

答案

所以我看了一下页面,发现了2个问题:

混合内容存在问题。使用“https”加载页面时,无法使用“http”加载文件。这是一个安全问题。

其次,我注意到JS文件的链接是http://127.0.0.1/...,它当前指向你的本地主机。

看看上面的评论,看起来你曾经把它指向其他地方,但我建议改变标签指向同一个源文件,但在src的开头用https://...

以下是访问您网站时出现的错误:

Mixed Content: The page at 'https://synodins.com/apps/chat/client.html'
was loaded over HTTPS, but requested an insecure script 
'http://127.0.0.1:8002/socket.io/socket.io.js'. This request has been 
blocked; the content must be served over HTTPS.

在那之后,让我知道,我会进一步研究它。

编辑:

如果可以使用相对URL,则始终首选。请查看与您的问题相关的答案:https://stackoverflow.com/a/29835657/672229

另一答案

在您的代码中包含此最新客户端脚本:

<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.3/socket.io.js"></script>

以上是关于通过letsencrypt设置https后,Nodejs聊天程序'io未定义'错误的主要内容,如果未能解决你的问题,请参考以下文章

[web建站]-简单通过letsencrypt配置HTTPS证书

无法在Nginx服务器中使用LetsEncrypt设置HTTPS

如何将LetsEncrypt onHostRule与LetsEncrypt的Consul Catalog后端一起使用?

用letsencrypt搭建免费的https网站

JupyterHub自动HTTPS Letsencrypt:Kubernetes Ingress控制器假证书

通过nginx 1.10.3和LetsEncrypt保护WebSocket连接