【发布时间】:2022-01-11 22:23:00
【问题描述】:
我正在尝试构建一个使用vue.js 作为前端和django 作为后端的聊天网站。它在Firefox 中运行良好,但在MS edge 和Google Chrome 中,Websocket 失败了。我在浏览器控制台中收到此消息。
WebSocket connection to 'ws://127.0.0.1:8000/inbox/' failed
我使用django-channels,所以它在 python 控制台中打印
WebSocket CONNECT /inbox/ [127.0.0.1:4965]
WebSocket DISCONNECT /inbox/ [127.0.0.1:4965]
当我打印出错误代码时,我得到1006
关闭代码 1006 是一个特殊代码,表示连接已关闭 由浏览器实现异常(本地)。
我的 WebSocket 代码
new WebSocket(url, authToken) // I use sec-websocket-protocol to transfer the authentication token
我做错了什么还是浏览器有问题?
-- 更新
new WebSocket("ws://127.0.0.1:8000/inbox/", "authtoken");
所以,我在第二个 Websocket 协议中发送身份验证令牌,并使用中间件在后端对用户进行身份验证。 当我删除该协议并在后端接受未经身份验证的用户时->
new WebSocket("ws://127.0.0.1:8000/inbox/");
-> WebSocket 连接得很好。问题是在发送第二个 Websocket 协议时。
【问题讨论】:
-
您使用的是哪个版本的操作系统、Edge 和 Chrome?能否请您使用
WebSocket.onerror检查错误详情?根据this answer,代码 1006 是 WebSocket 本身的低级错误,它在您的代码和实现中。 -
我的操作系统是
Windows 10 Pro OS build 19042.1288,Edge 浏览器版本是96.0.1054.43(最新)。我尝试使用WebSocket.onerror打印错误,但它没有提供太多信息。 @玉舟 -
我使用NodeJS WebSocket server ws 做了一个简单的示例,它在带有本地主机的 Edge 和 Chrome 中运行良好。我认为这个问题可能与 django-channels 有关。您可以参考this thread 看看是否有帮助。此外,您的域使用
http还是https? -
@YuZhou 感谢您的样品。我的域使用
http。 -
如果您使用的是简单的 NodeJS WebSocket 示例,它可以在 Edge 和 Chrome 中使用吗? localhost 域在 Edge 和 Chrome 中运行良好吗?如果没有可重复的样本,很难找到问题所在。如果可能,您可以提供可以重现问题的步骤和最小代码 sn-p。
标签: google-chrome websocket microsoft-edge django-channels