定义经过身份验证的 WebSocket 连接的验证和操作,涵盖握手来源、消息授权、限制、存活性、背压、重连、部署排空和可观测性。
**包状态:**参考上下文,已准备好供人工审核。合同和测试场景已完成,但不保证采用的实现已通过它们。
决策
授权 HTTP 升级和每个消息操作。将连接绑定到经过身份验证的主体、租户、策略版本和过期时间;应用有界队列和恢复语义,而不是假设持久套接字是可靠的。
范围
- 升级、身份验证、Origin 验证、订阅、消息模式、授权、限制、心跳、重连、恢复、排空和审计。
- 支持经过身份验证的双向消息传递的浏览器和服务客户端。
- 负载、滥用和部署验证。
不在此范围内
- 特定的传输库或端到端事件存储设计。
- 使用已连接的套接字作为永久授权证明。
合同
- 浏览器升级验证允许列表中的 Origin,并使用防止 URL/日志泄露的凭据。
- 每个入站消息验证信封模式、大小、速率、操作、资源、租户和当前授权。
- 订阅授权在策略更改或有界间隔时重新检查。
- 出站队列有字节/消息限制和明确的慢消费者策略。
- 支持恢复的消息携带单调流偏移;声明交付语义和重复处理。
- 服务器排空停止新的升级,通知或关闭带有可重连代码的连接,并设有硬截止时间。
实现指导
- 使用带有消息 ID、类型、版本、关联 ID 和负载的小信封。
- 优先使用安全的同站点 cookie 或通过批准机制发送的短期握手凭据;在任何地方都要脱敏。
- 实现 ping/pong 或应用心跳,测量空闲和超时配置。
- 负载测试重连风暴和慢消费者,而不仅仅是稳定的消息吞吐量。
失败处理和保障措施
- 无效模式或未授权操作返回有界错误,可能关闭重复违规者,且不回显敏感负载。
- 当无法刷新授权时,停止受保护的订阅。
- 当恢复偏移超出保留范围时,要求快照刷新,而非静默跳过历史。
验证与操作
- 测量活动连接数、按原因拒绝升级、消息速率/字节、授权拒绝、队列深度、慢消费者关闭、心跳超时、重连速率和恢复失败。
- 对 Origin 拒绝激增、每连接内存和重连风暴发出警报。
- 在预发布环境运行部署排空和撤销测试,并定期在生产安全演练中执行。
本包中的可执行示例是夹具和验收合同。从集合根目录运行
python tools/validate.py 检查包结构和元数据;然后在目标仓库中实现并执行场景。
采用假设
example.yaml中的名称和数值是采用配置文件,而非通用默认值。- 采用团队必须将参与者、数据类别、错误词汇和所有权映射到其系统。