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 用于实时事件流。

相关推荐
2401_894915535 小时前
GEO 优化源码全解析:从搜索引擎到 AI 引擎的底层改写逻辑
java·服务器·前端·数据库·人工智能·分布式·搜索引擎
huainingning9 小时前
R4930-G7服务器(RAID-LSI-9560-LP-8i-4GB)网页方式做Raid方法
服务器
80s77711 小时前
什么是动态IP?静态IP和动态IP有什么区别?
网络·网络协议·tcp/ip
小杨不想秃头12 小时前
信息安全工程师教程第二章密码学
运维·服务器·密码学
I'mChloe12 小时前
WGCLOUD怎么监控多台服务器?从Server、Agent 部署到监控面板实战
运维·服务器
Android系统攻城狮12 小时前
Linux PipeWire深度解析之pw_init调用流程与实战(八十三)
linux·运维·服务器·音频进阶·pipewire音频进阶
zbyyd14 小时前
Linux 进程管理详解:从概念到实战
linux·运维·服务器
IPdodo_16 小时前
代理 IP 服务商 SLA 怎么验?7 项指标与 Python 探测脚本实战
运维·python·网络协议·网络安全·代理ip
云飞云共享云桌面16 小时前
智能装备工厂研发团队如何利用单台服务器承载 10 路 SolidWorks 并发?
运维·服务器·3d·自动化·制造
辻弋20116 小时前
手动关服务会自动重启、组策略家庭版用不了——Windows Update Blocker用“禁用+锁定”双保险,让Win10/11自动更新彻底闭嘴
服务器·人工智能·windows·电脑·开源软件