因此我需要使用特定代码拒绝 Websocket 连接,以便客户端可以正确处理拒绝。目前,当您拒绝连接时:
message.reply_channel({'accept': False})
客户端简单地得到一个
403
错误。
我可以使用代码关闭连接:
message.reply_channel({'close':3000})
但这需要首先接受连接。如果这是唯一的方法,那就这样吧,但我觉得应该有一种方法可以用我根本找不到的代码来拒绝。
我正在使用 Django Channels 1.1.8,因此不幸的是 2.x 版本的更改对我没有好处。
对于后代,要在 Django Channels 1.1.8 中的握手期间关闭连接,请使用:
message.reply_channel.send({'accept': False})
当您在握手阶段关闭时,根据 ASGI 规范,符合 ASGI 的服务器必须以 HTTP
403
状态代码关闭连接,并且不完成 WebSocket 握手。您无法使用 WebSocket 协议指定的不同 HTTP 状态代码关闭连接。
除
之外的任何状态代码都表示 WebSocket 握手尚未完成,并且 HTTP 语义仍然适用。101
在符合 ASGI 的服务器中是不允许的。
关闭—
活动send
由应用程序发送,告诉服务器关闭连接。
如果在接受套接字之前发送此消息,则服务器必须关闭连接并显示 HTTP
错误代码(禁止),并且不完成 WebSocket 握手。403
——ASGI规范.
总而言之,这不是框架的错,而是ASGI规范的错。