【问题标题】:"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()

【问题讨论】:

    标签: django websocket django-channels


    【解决方案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')
    

    【讨论】:

      猜你喜欢
      • 2016-03-15
      • 1970-01-01
      • 1970-01-01
      • 2019-04-05
      • 1970-01-01
      • 1970-01-01
      • 2021-06-19
      • 2017-08-01
      • 1970-01-01
      相关资源
      最近更新 更多