我在我的网站上设置了一个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
问题是,正如你在客户端上看到检查元素时所看到的那样,我得到错误:
ReferenceError:未定义io
我已经搜索过此错误,发现:
socket.io - ReferenceError: io is not defined
但我已经按照他在答案中建议的方式做事了。
我不确定问题是什么,虽然我怀疑在客户端加载socket.io模块有问题。
有趣的是,我可以毫无问题地在我的localhost上运行聊天,但是当我尝试在服务器上运行它时,我得到了这个错误。
有人能看出问题所在吗?
答案 0 :(得分:2)
所以我看了一下页面,发现了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
答案 1 :(得分:0)
在您的代码中包含此最新客户端脚本:
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.3/socket.io.js"></script>