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

相关推荐
库拉镜像AI牛牛10 分钟前
短剧内容自动化生产:知漫剧工作室落地教程
大数据·服务器·前端·人工智能·语音识别
Android系统攻城狮16 分钟前
Linux Gstreamer深度解析之gst_audio_encoder_get_frame_max调用流程与实战(五十九)
linux·运维·服务器·gstreamer音视频·音视频进阶·gstreamer音视频进阶
l1t1 小时前
DeepSeek总结的一个不含数据的 DuckDB 数据库
服务器·数据库·duckdb
忆挽篱笙歌1 小时前
makefil
linux·运维·服务器
变量探索SEQVEC2 小时前
一个网段里 10 个 IP,其实是同一个人:13 天蜜罐日志的攻击者画像
服务器
OsDepK3 小时前
OSMDE_v1.9.0已加入FTP与shell功能
linux·运维·服务器
剑锋所指,所向披靡!3 小时前
HTTP服务器的基本相关概念
服务器·网络协议·http
硅基手札3 小时前
【Linux内核专栏 11】驱动框架:platform / char / misc / 设备树
linux·运维·服务器
2301_777998344 小时前
TCP协议:滑动窗口与流量控制
服务器·网络·网络协议·tcp/ip·php
well06125 小时前
Linux 文件相关底层知识
linux·运维·服务器