WebSocket
干什么用的
★★★ HTTP 的方向是不对称的:只能客户端问、服务器答。服务器想主动推一条消息给浏览器,它没有办法。
★★★ WebSocket 就是来补这一件事的:借一个 HTTP 请求握手,拿到 101 之后把这条 TCP 连接改造成一根双向管子 —— 两头谁都可以随时发。
★★★ 它和 HTTP 是什么关系
★★★★ 只在握手那一下是 HTTP,之后一个 HTTP 字节都没有了。
· 借 HTTP 握手是为了过得去:复用 80/443、过防火墙和代理;
· 101 之后帧格式完全是自己的,头只剩 2~14 字节;
· 所以它不是 HTTP 的第四代 —— HTTP/1.1、2、3 都还是「请求→响应」,它不是。
★★ 帧图上外面那摞灰格和 HTTP/2 一样,但里面那几格完全换了。
★ 常见误解
★★★ 「WebSocket 是 HTTP 的一种」 —— 只有握手那一个包是。之后连帧格式都不一样。
★★★ 「有了 WebSocket 就该全都用它」 —— 它没有缓存、没有状态码、不能被 CDN 加速。普通取数据还是该用 HTTP。
★★ 「ws:// 就够了」 —— 明文 ws:// 常被代理掐断,生产上一律用 wss://(也就是套在 TLS 里)。