我正在从 Django 通道文档中制作一个示例,效果非常好!
我在日志中看到
HTTP GET /chat/lobby/ 200 [0.00, 127.0.0.1:43164]
WebSocket HANDSHAKING /ws/chat/lobby/ [127.0.0.1:43168]
WebSocket CONNECT /ws/chat/lobby/ [127.0.0.1:43168]
但是我无法连接 wscat 客户端
andrey@andrey-desktop:~$ wscat -c "ws://127.0.0.1:8000/ws/chat/lobby/"
error: Unexpected server response: 403
或邮递员 - 邮递员断开连接
我在日志中看到失败的尝试
WebSocket HANDSHAKING /ws/chat/lobby/ [127.0.0.1:43232]
WebSocket REJECT /ws/chat/lobby/ [127.0.0.1:43232]
WebSocket DISCONNECT /ws/chat/lobby/ [127.0.0.1:43232]
如何与其他客户端建立连接,而不仅仅是从 javascript/html 页面建立连接?
检查asgi.py中是否设置了
AllowedHostsOriginValidator
。
如果这样做,您需要在标头中发送 Origin
。
如果是本地主机,Origin
是 http://127.0.0.1:8000
。
正如马克所说:https://stackoverflow.com/a/74761272/15618264
如果您的应用程序中设置了AllowedHostsOriginValidator,您的服务器将拒绝WS连接。
无论您的服务器是什么,IP 地址还是域,您都需要在请求中传递 Origin 标头。
在 Postman 中,转到标头,输入 Origin,使用方案(http、https)传递域名或 IP 地址。