WebSocket 是会话,不是页面
封面所示及本文讨论的是 HTTP/1.1 升级流程;其他 HTTP 版本的建立方式不同。HTTP 描述请求与响应,并不要求每个请求都新建一条 TCP 连接。WebSocket 提供面向消息的双向会话。选择它而不是轮询,是为了让任一端及时主动发送更新,同时接手会话身份、队列、存活判断与恢复的责任。连接建立只是起点,后续的资源与状态也必须有人管理。 图示 HTTP/1.1 场景。心跳期限与认证属于应用策略;重新连接不会自动补回遗漏的消息。 升级买到什么 本文的练习限定在 HTTP/1.1。服务端接受开启握手后返回 101,此后连接中传输的是 WebSocket 帧。检查 Upgrade 与 Connection 时,要匹配列表中完整的成员,并按协议规定忽略大小写;仅仅发现 notupgrade 中含有 upgrade 子串不能算通过。还要检查版本为 13,以及 Base64 密钥解码后恰好十六字节。接受值证明对方理解了握手,却不能证明用户身份。RFC 6455,第 4.2 与 10.5 节。 101 没有 HTTP 消息体,不允许携带 Content-Length,值为零也不例外;同样不能发送 Transfer-Encoding。头部结束后的字节属于 WebSocket 分帧,不能把它理解为普通空响应后随意追加的一段字符串。这种边界必须由实际收发与解析来验证。RFC 9110,第 8.6 节 与 RFC 9112,第 6.1 节。 ...