WebSocket(WS)协议与 HTTP 协议的异同
HTTP(HyperText Transfer Protocol,超文本传输协议)和 WebSocket(简称 WS)都是基于 TCP 的应用层协议,用于客户端(如浏览器)和服务器之间的通信。但它们设计目的不同:HTTP 适合传统网页请求,WebSocket 专为实时双向通信优化。
相同点
- 底层基础:两者都建立在 TCP 连接之上,确保可靠传输。
- 初始握手:WebSocket 连接从 HTTP 开始(客户端发送带有
Upgrade: websocket头的 HTTP 请求,服务器响应 101 Switching Protocols 后升级)。 - 端口共享:通常使用相同端口(如 80 或 443),便于穿越防火墙。
- 安全变体:HTTP 有 HTTPS(TLS 加密),WebSocket 有 WSS。
- 应用场景重叠:现代应用常结合使用(如先 HTTP 加载页面,再 WS 实时更新)。
不同点(核心对比)
| 项目 | HTTP | WebSocket (WS) |
|---|---|---|
| 通信模式 | 单向(半双工):客户端请求 → 服务器响应 | 双向(全双工):连接建立后,双方可随时发送数据 |
| 连接性质 | 无状态、短连接(每次请求新建/关闭,或 HTTP/1.1 keep-alive) | 有状态、持久连接(一次握手后长期保持) |
| 协议开销 | 高(每次请求带完整头部,如 Cookie、Host) | 低(握手后数据帧仅几字节头部) |
| 实时性 | 差(需轮询 Polling、長轮询 Long Polling 或 SSE) | 优秀(低延迟、即时推送) |
| 数据格式 | 请求/响应结构(头部 + 主体) | 帧(Frame)结构,支持二进制/文本 |
| 典型用例 | 网页加载、REST API、文件下载 | 实时聊天、在线游戏、股票行情、直播通知 |
| 浏览器支持 | 全支持 | 现代浏览器全支持(IE10+) |
WebSocket 握手过程(关键差异点)
WebSocket 不是完全独立的协议,它“借道”HTTP 升级:
- 客户端发送普通 HTTP GET 请求,带特殊头部(如
Connection: Upgrade、Sec-WebSocket-Key)。 - 服务器验证后返回 101 状态码,协议切换为 WebSocket。
- 此后通信不再是 HTTP 格式,而是轻量帧。
选择建议
- 用 HTTP:静态内容、偶尔请求、RESTful API(结合 HTTP/2 或 SSE 可部分实现实时)。
- 用 WebSocket:需要低延迟双向通信(如聊天 App、协作编辑、实时数据推送)。
- 混合使用:大多数现代 Web App(如 WhatsApp Web)先 HTTP 加载,再 WS 保持实时。
WebSocket 不是 HTTP 的“替代者”,而是补充者,解决了 HTTP 在实时场景的痛点。如果你有具体应用场景疑问,欢迎继续问!