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

相关推荐
草莓熊Lotso2 小时前
【Linux网络】深入理解 HTTP 协议(四):完善 C++ HTTP 服务器:从协议原理到生产级实现
linux·运维·服务器·c语言·网络·c++·http
m0_737302582 小时前
OpenClaw:落地执行的开源本地化 AI 智能体
服务器
Yang96112 小时前
煤矿 SDH/PDH 线路检修难?鼎讯 HM-G2500 手持式传输分析仪实用解析
运维·服务器·网络
白狐_7982 小时前
AI 数据分析 Skill 实战:用模拟游客数据生成文旅运营报告
大数据·服务器·人工智能
claro2 小时前
windows2025开启Hyper-V和vmware17共存(2)
运维·服务器
snow@li2 小时前
前端:本地电脑和服务器,本质上都是一台计算机。
运维·服务器·前端
luj_17682 小时前
硝酸体系核关联假说解析
服务器·c语言·开发语言·经验分享·算法
逆境不可逃2 小时前
【WebSocket 02】 握手拦截实现 Token 鉴权、Ping/Pong 心跳保活、前端断线自动重连
网络·websocket·网络协议
Seven972 小时前
网页为什么越来越快?一文看懂 HTTP 的三次进化
http·http3