为何ASGI规范不允许携带自定义原因拒绝WebSocket握手?
ASGI WebSocket握手规范疑问:为何拒绝握手只能返回403?
ASGI WebSocket握手的基础流程
- 客户端与兼容ASGI的服务器建立连接后,服务器会将
Connect event转发给应用。 - 应用必须回复
Accept event或Close event两种事件之一。 - 服务器必须在WebSocket的握手阶段发送
Connect event,且必须收到应用的回复后,才能完成WebSocket握手。 - 若应用回复
Close event,服务器必须返回HTTP403状态码并关闭连接,且不完成WebSocket握手。
核心疑问点
握手阶段通常会做身份验证操作,按HTTP语义,未通过身份验证理应返回401状态码,但ASGI规范却强制要求此时只能返回403,甚至不允许在回复事件中携带原因字段。
而WebSocket协议规范本身是支持除101之外的任意HTTP状态码的:
除
101之外的任意状态码均表示WebSocket握手未完成,且HTTP语义仍然适用。
那么ASGI规范做出这种限制的设计依据是什么?
内容的提问来源于stack exchange,提问作者Chukwujiobi Canon
相关产品推荐
相关产品推荐

