Connect event
[asgi-spec] 转发到应用程序。必须使用 Accept event
[asgi-spec] 或 Close event
来响应此事件。 [asgi-spec] 服务器必须在 WebSocket 的 握手阶段 期间发送此事件,并且 不 完成握手,直到收到回复。
如果应用程序以
Close event
响应,服务器 必须 使用 HTTP 403
状态代码关闭连接,并且不完成 WebSocket 握手。
为什么只是
403
?甚至不允许原因键成为响应事件的一部分。只是403
。您可能期望在握手期间完成身份验证,因此可能会出现401
。
WebSocket 协议规范允许除
101
之外的任何 HTTP 状态代码。
除
之外的任何状态代码都表示 WebSocket 握手尚未完成,并且 HTTP 语义仍然适用。101
ASGI 规范背后的基本原理是什么?
限制握手响应的决定主要是出于对简单性和一致性的渴望。通过指定单个状态代码 (403),ASGI 简化了服务器的实现并确保行为一致。因此,开发人员可以依靠可预测的握手拒绝响应,使调试和故障排除“更加简单”(读作空引号,您的意见可能会有所不同)。
WebSocket 协议规范允许使用除 101 之外的任何 HTTP 状态代码来指示握手尚未完成。 WSGI 通过不实现 WebSocket 处理标准并让其他组件处理特定于协议的细节来避免这种情况。 ASGI 带来了更多的复杂性。 ASGI 的范围更广泛,并选择使用 403。这可以说更 Pythonic,因为它以“......只有一种明显的方法来做到这一点”来强化 pep 20 心态。