SSE 是 HTTP/2 的服务器推送?

引言

最近比较流行的 AI 对话聊天软件基本都是使用 SSE 来实现的,原因在于 SSE 可以实时地将服务器端的计算结果推送给客户端。用户输入问题后,服务器端就会实时地以流式的方式返回计算结果。

什么是 SSE

SSE(Server-Sent Events)是一种基于 HTTP 协议的服务器推送技术,它允许服务器向客户端推送实时数据,而不需要客户端主动发起请求。

我们都知道 HTTP/2 协议支持服务器主动推送数据,那么 SSE 是基于 HTTP/2 实现的吗?答案是否定的,SSE 是 RFC6454 定义的标准,完全基于 HTTP/1.1 的持久连接。

服务器只要保持连接不关闭,并按 SSE 事件格式 (event:.\ndata:..\n\n) 写入数据即可,浏览器会把这些数据当作事件流处理。

SSE 与 HTTP/1.1 的关系

关键点 说明
协议 SSE 使用 HTTP/1.1 的持久连接 (Connection: keep-alive)
请求方式 只需要一个 GET 请求,服务器保持连接不关闭
内容类型 Content-Type: text/event-stream
传输方式 服务器通过 chunked transfer encoding(HTTP/1.1 的分块传输)发送事件
浏览器支持 Chrome、Firefox、Safari、Edge 等均支持;IE 11 需要 polyfill

HTTP/1.1 与 HTTP/2 的区别

关键点 HTTP/1.1 HTTP/2
连接 持久连接 (Connection: keep-alive) 单个多路复用连接
传输 Transfer-Encoding: chunked 二进制帧
推送方式 Server-Sent Events (SSE) HTTP/2 Server Push
实现 只需在同一请求上持续写数据 需要专门的 PUSH_PROMISE 帧

SSE 本质上是 HTTP/1.1 的持久连接,使用 text/event-stream 内容类型和 chunked 传输。

SSE 与 HTTP/2 Server Push 的区别

SSE (HTTP/1.1) HTTP/2 Server Push
方向 单向(服务器→客户端) 单向(服务器→客户端)
协议层 HTTP/1.1 + chunked HTTP/2 + PUSH_PROMISE
使用场景 实时日志、推送通知、聊天(只需服务器推送) 预加载资源 (CSS/JS)
实现难度 只需写一个持续输出的路由 需要服务器支持 HTTP/2 并手动触发 push
浏览器支持 所有现代浏览器 所有现代浏览器(但需要服务器开启 HTTP/2)
兼容性 只要浏览器支持 SSE(IE11 需要 polyfill) 需要 HTTP/2,IE11 不支持

结论

SSE 不是 HTTP/2 的服务器推送,而是基于 HTTP/1.1 的单向流。HTTP/2 的 Server Push 主要用于预加载资源,而 SSE 用于实时事件流。

相关推荐
一技安身1 小时前
【信创】docker-26.0.2.tgz 原理 + 完整安装
linux·运维·服务器
努力的lpp1 小时前
【攻击溯源四步法 · 面试讲解稿】
网络·网络协议·安全
cccc卌1 小时前
HTTP协议总结
网络·网络协议·http
郝学胜-神的一滴2 小时前
Effective Python 条款 13:善用星号解包,告别下标切片拆分的坑
服务器·开发语言·数据结构·python·程序人生·pycharm
智购无人售货机厂家2 小时前
2026自动售货机品类拓展逻辑:从饮料零食到鲜食药品文创的工程实践~YH
服务器·人工智能·单片机·线性代数·矩阵
国际云,接待3 小时前
华为云 ECS 怎么选规格:从用户地域、CPU/内存比、PPS 和云硬盘性能做购买前容量判断
服务器
国际云,接待3 小时前
华为云 CBR 备份不是点一下就完事:用恢复演练验证 ECS 的 RPO、RTO 和跨区域容灾
服务器
学烹饪的小胡桃3 小时前
资产设备管理系统 WGFIX 怎么设置https访问
linux·运维·服务器·网络·安全
张宇Joaquin3 小时前
XX业务反序列化数据报错问题定位报告
服务器
明月_清风3 小时前
MHS:AI Agent 开始连接物理世界
人工智能·后端·网络协议