一句话概括: HTTP 是一问一答(单向请求,短连接);WebSocket 是全双工长连接,双方可以随时互相发消息。
1. 通信模式(最核心)
HTTP:半双工 客户端发请求 → 服务器返回响应,一次请求一次应答。服务器不能主动推消息给客户端。 (新版本 HTTP/2、HTTP/3 有服务端推送,但不是原生双向实时通道,和 WebSocket 定位不一样)
WebSocket:全双工 连接建立之后,客户端和服务端随时互相发送数据,不用每次都发请求头。
2. 连接生命周期
HTTP:默认短连接(HTTP/1.1 的
keep-alive只是复用 TCP 连接,依然是一问一答模式,不是长会话通道) 一次请求完成后,连接空闲就会断开。WebSocket:长连接 只需要一次握手,TCP 连接持续保持,直到一方主动关闭。
WebSocket 握手本身是通过 HTTP 请求完成的:用一个带
Upgrade: websocket的 HTTP 请求升级协议,成功之后,后续报文就不再是 HTTP 报文,走 WebSocket 帧协议。

3. 头部开销
HTTP:每次请求都要带上大量 Header(Cookie、UA、参数等),开销大
WebSocket:握手之后传输的是二进制 / 文本帧,头部极小(2~10 字节左右),适合高频实时消息
4. 适用场景
✅ HTTP 适合
普通页面加载、接口查询、文件上传下载、后台管理接口
不需要实时,客户端主动拉取数据
✅ WebSocket 适合
聊天室、在线通知、实时数据大屏、股票行情、游戏、在线协同编辑、IoT 设备上报
需要服务端主动推送、高频小消息
5. 端口 & 协议标识
HTTP:
http://默认 80;HTTPS:https://默认 443WebSocket:
ws://默认 80;wss://(加密,推荐)默认 443
wss 就是 WebSocket over TLS,和 https 一样加密,生产环境优先 wss

6. 其他补充对比表
容易混淆的补充:SSE
很多人把 SSE 和 WebSocket 搞混:
SSE(Server-Sent Events):基于 HTTP,只能服务端单向推送给客户端,客户端不能发消息;适合单向实时通知,不用双向交互。
WebSocket:双向。
简单选型建议
只是查数据、提交表单 → HTTP
服务端要不停推实时数据,不需要客户端频繁回传 → 可选 SSE
双方都要频繁互相发消息(聊天、实时对战)→ WebSocket
本文原创作者:易君召,详见:https://www.yijunzhao.cn/authors/yijunzhao,转载请注明出处。
原文链接
欢迎访问 小易撩挨踢