为什么 ASGI 规范不允许以自定义原因拒绝握手?

问题描述 投票:0回答:1

客户端最初打开与 ASGI 兼容服务器的连接。服务器将

Connect event
[asgi-spec] 转发到应用程序。必须使用
Accept event
[asgi-spec]
Close event
来响应此事件。 [asgi-spec]
服务器必须在 WebSocket 的 握手阶段 期间发送此事件,并且 完成握手,直到收到回复。

如果应用程序以

Close event
响应,服务器 必须 使用 HTTP
403
状态代码关闭连接,并且不完成 WebSocket 握手。


为什么只是

403
?甚至不允许原因键成为响应事件的一部分。只是
403
。您可能期望在握手期间完成身份验证,因此可能会出现
401

WebSocket 协议规范允许除

101
之外的任何 HTTP 状态代码。

101
之外的任何状态代码都表示 WebSocket 握手尚未完成,并且 HTTP 语义仍然适用

ASGI 规范背后的基本原理是什么?

python websocket asgi
1个回答
0
投票

限制握手响应的决定主要是出于对简单性和一致性的渴望。通过指定单个状态代码 (403),ASGI 简化了服务器的实现并确保行为一致。因此,开发人员可以依靠可预测的握手拒绝响应,使调试和故障排除“更加简单”(读作空引号,您的意见可能会有所不同)。

WebSocket 协议规范允许使用除 101 之外的任何 HTTP 状态代码来指示握手尚未完成。 WSGI 通过不实现 WebSocket 处理标准并让其他组件处理特定于协议的细节来避免这种情况。 ASGI 带来了更多的复杂性。 ASGI 的范围更广泛,并选择使用 403。这可以说更 Pythonic,因为它以“......只有一种明显的方法来做到这一点”来强化 pep 20 心态。

© www.soinside.com 2019 - 2024. All rights reserved.