“发送非空 'Sec-WebSocket-Protocol' 标头但未收到响应” Django 频道
Posted
技术标签:
【中文标题】“发送非空 \'Sec-WebSocket-Protocol\' 标头但未收到响应” Django 频道【英文标题】:"Sent non-empty 'Sec-WebSocket-Protocol' header but no response was received" Django Channels“发送非空 'Sec-WebSocket-Protocol' 标头但未收到响应” Django 频道 【发布时间】:2020-11-09 21:57:05 【问题描述】:当我尝试通过 websocket 连接到服务器时,我只在 chrome 中(不是在 safari 和 firefox 中)收到此错误:
Sent non-empty 'Sec-WebSocket-Protocol' header but no response was received
。
服务器接受连接,但 chrome 意外立即将其关闭。
这就是我在前端创建 websocket 连接的方式:
const websocket = new WebSocket('ws://127.0.0.1:8000/ws/', ['Token', 'user_secret_token'])
这就是我的consumers.py
的样子:
class MyConsumer(JsonWebsocketConsumer):
def connect(self):
self.room_group_name = 'example_room'
# Join room group
async_to_sync(self.channel_layer.group_add)(self.room_group_name, self.channel_name)
self.accept()
【问题讨论】:
【参考方案1】:解决方案是在服务器上调用self.accept()
时,将我使用的websocket协议(Token)添加为子协议参数。
这就是我的消费者现在的样子:
class MyConsumer(JsonWebsocketConsumer):
def connect(self):
self.room_group_name = 'example_room'
# Join room group
async_to_sync(self.channel_layer.group_add)(self.room_group_name, self.channel_name)
# incorrect
# self.accept()
# correct
self.accept('Token')
【讨论】:
以上是关于“发送非空 'Sec-WebSocket-Protocol' 标头但未收到响应” Django 频道的主要内容,如果未能解决你的问题,请参考以下文章