Django Channels报错ValueError: Invalid IPv6 URL求助
Django Channels WebSocket 连接报错:Invalid IPv6 URL
我已在项目中配置Django Channels,API及管理后台URL均正常运行,但尝试创建WebSocket连接时出现如下错误:
WebSocket HANDSHAKING /ws/notification/ [127.0.0.1:48494] Exception inside application: Invalid IPv6 URL Traceback (most recent call last): File "/home/jlp-020/Projects/POC_flutter_dating_application_BE/env/lib/python3.10/site-packages/django/contrib/staticfiles/handlers.py", line 101, in __call__ return await self.application(scope, receive, send) File "/home/jlp-020/Projects/POC_flutter_dating_application_BE/env/lib/python3.10/site-packages/channels/routing.py", line 62, in __call__ return await application(scope, receive, send) File "/home/jlp-020/Projects/POC_flutter_dating_application_BE/env/lib/python3.10/site-packages/channels/security/websocket.py", line 35, in __call__ if self.valid_origin(parsed_origin): File "/home/jlp-020/Projects/POC_flutter_dating_application_BE/env/lib/python3.10/site-packages/channels/security/websocket.py", line 54, in valid_origin return self.validate_origin(parsed_origin) File "/home/jlp-020/Projects/POC_flutter_dating_application_BE/env/lib/python3.10/site-packages/channels/security/websocket.py", line 73, in validate_origin return any( File "/home/jlp-020/Projects/POC_flutter_dating_application_BE/env/lib/python3.10/site-packages/channels/security/websocket.py", line 74, in <genexpr> pattern == "*" or self.match_allowed_origin(parsed_origin, pattern) File "/home/jlp-020/Projects/POC_flutter_dating_application_BE/env/lib/python3.10/site-packages/channels/security/websocket.py", line 102, in match_allowed_origin pattern_hostname = urlparse("//" + pattern).hostname or pattern File "/usr/lib/python3.10/urllib/parse.py", line 400, in urlparse splitresult = urlsplit(url, scheme, allow_fragments) File "/usr/lib/python3.10/urllib/parse.py", line 495, in urlsplit raise ValueError("Invalid IPv6 URL") ValueError: Invalid IPv6 URL WebSocket DISCONNECT /ws/notification/ [127.0.0.1:48494]
解决方案
问题根源:该错误是由于
CHANNELS_ALLOWED_ORIGINS或ALLOWED_HOSTS配置中存在格式错误的地址,导致Channels在验证WebSocket请求源时,urlparse解析地址失败抛出异常。修复步骤:
- 打开项目的
settings.py文件,检查CHANNELS_ALLOWED_ORIGINS配置:- 确保所有源地址格式正确:IPv4地址需带协议(如
"http://127.0.0.1:8000");IPv6地址必须用方括号包裹(如"http://[::1]:8000");域名需包含完整协议和端口(如果非默认端口)。
- 确保所有源地址格式正确:IPv4地址需带协议(如
- 开发环境可临时设置
CHANNELS_ALLOWED_ORIGINS = ["*"]跳过源验证(生产环境禁止使用)。 - 检查
ALLOWED_HOSTS配置,确保没有格式错误的IP或域名。 - 重启Django Channels服务,使新配置生效。
- 打开项目的
内容的提问来源于stack exchange,提问作者Himanshu Sharma
相关产品推荐
相关产品推荐

