文章目录
一、介绍
HTTP(超文本传输协议)
本质:无状态的请求-响应协议。
数据方向:仅限客户端主动拉取,服务器无法主动推送。
SSE(Server-Sent Events,服务器推送事件)
本质:基于HTTP的单向长连接推送技术。
工作方式:客户端通过 EventSource API 建立一个 HTTP 连接,服务器保持连接不关闭,并持续向客户端写入 text/event-stream 格式的数据流。
数据方向:仅服务器 → 客户端(单向),客户端发数据仍需另开普通 HTTP 请求。
WebSocket
本质:基于TCP的全双工通信协议,通过 HTTP 握手升级而来。
工作方式:先走HTTP Upgrade头协商切换协议,之后在单个 TCP 连接上双向收发消息帧(二进制或文本)。
数据方向:双向,客户端和服务器可随时互相发送数据。

二、区别
核心区别是
SSE 单向通讯, 具有持续性
WebSocket 双向通讯, 具有持续性
HTTP 一次性通讯, 无持续性
下面是一些具体细节
| 维度 | HTTP | SSE | WebSocket |
|---|---|---|---|
| 通信方向 | 单向(请求→响应) | 单向(服务器→客户端) | 双向全双工 |
| 协议基础 | HTTP/1.1, HTTP/2, HTTP/3 | 纯 HTTP (Content-Type: text/event-stream) | TCP 长连,WS/WSS 独立协议 |
| 连接维持 | 短连接(可复用) | 长连接(浏览器自动重连) | 长连接(需代码处理重连) |
| 消息格式 | 任意(JSON/HTML/文件) | 纯文本流(带 data: 前缀) | 帧(文本/二进制) |
| 服务端推送 | ❌ 不支持 | ✅ 支持 | ✅ 支持 |
| 客户端上传 | ✅ 支持(默认行为) | ❌ 不支持(需另发 HTTP) | ✅ 支持(原生高效) |
| 浏览器兼容性 | 100% | IE/旧 Edge 不支持,现代全支持 | IE10+,现代全支持 |
| 防火墙/代理友好 | 极好 | 较好(基于 HTTP 标准头) | 略差(部分老旧代理可能阻断 Upgrade) |
三、使用场景
| 方式 | 场景 |
|---|---|
| HTTP | 获取静态资源、提交表单 |
| SSE | AI对话流式输出(打字机效果------这是SSE的经典强项)、股票行情实时刷新(只需推价格变化)、社交媒体通知流(点赞、评论数更新)、大型文件上传处理进度条(服务器告知处理到 80% 了) |
| WebSocket | 多人在线文档、客服聊天、棋牌对战 |