Search

彻底搞懂 SSE 与 Streamable HTTP:流式通信的前世今生

从 SSE 到 Streamable HTTP,彻底理清 HTTP 流式通信的核心概念、演进关系和适用场景。

Pluszzz2 min read

彻底搞懂 SSE 与 Streamable HTTP:流式通信的前世今生

在大模型流式输出、服务端实时推送、异步消息交互的开发场景中,SSEStreamable HTTP 是两个高频出现的技术名词。很多开发者容易将二者混淆,甚至误以为它们是对立的两种技术。

今天这篇文章,就由浅入深讲清楚二者的核心定义、底层逻辑、演进关系和适用场景,帮你彻底理清 HTTP 流式通信的核心知识。

一、先搞懂基础:为什么需要 HTTP 流式通信?

我们日常使用的普通 HTTP 接口,都是一问一答的短连接模式:客户端发起请求,服务端接收请求、处理完成后,一次性返回完整数据,随后连接立即关闭。

但在实时交互场景下,这个模式存在明显短板:比如 AI 逐字输出回答、服务端实时推送日志、异步任务进度更新,我们需要的不是「一次性完整结果」,而是服务端持续、分段向客户端推送数据的能力。

为了解决这个问题,基于 HTTP 的流式通信方案应运而生,而 SSE 和 Streamable HTTP 就是这套方案中最核心的两个概念。

二、SSE:浏览器原生的服务端推送标准

SSE 全称 Server-Sent Events(服务器推送事件),是 W3C 官方标准化的 HTML5 技术,也是最经典的 HTTP 单向流式方案,诞生已久、兼容性极强。

1. 核心特性

  • 通信方向单一:仅支持 服务端 → 客户端 单向数据推送,客户端无法通过这条长连接上传数据

  • 基于标准 HTTP:无特殊协议、无需握手,底层依赖 HTTP 长连接和 Chunked 分块编码

  • 固定规范格式:响应头必须为Content-Type: text/event-stream,数据以固定的 data: 前缀标识,双换行符 \n\n 作为单条消息结束标记

  • 原生能力完善:浏览器自带 EventSource API,内置自动断线重连、消息ID断点续传、事件分类等能力,开箱即用

2. 经典传统架构(现已逐步淘汰)

早期 SSE 落地普遍采用双端点架构

  • GET 接口:建立 SSE 长连接,专门用于服务端下行推送数据

  • POST 接口:客户端单独发起请求,用于上传业务数据

这种架构最大的问题是运维和扩展困难:双接口需要单独配置鉴权、跨域,且长连接需要会话粘连,无法友好适配分布式负载均衡,水平扩展成本极高。

3. 适用场景

纯单向实时推送场景:系统消息通知、实时日志展示、数据大屏刷新、简单的静态流式输出。

三、Streamable HTTP:新一代统一流式架构

很多人会误解:Streamable HTTP 是替代 SSE 的新技术。其实不然,Streamable HTTP 不是新协议,而是一套现代化的 HTTP 流式传输架构规范,目前主要由 MCP(模型上下文协议)普及并标准化。

1. 核心定义

Streamable HTTP(流式 HTTP)的核心是 单端点统一通信:同一个 HTTP 接口,既能处理普通短请求,也能支持流式长推送,彻底解决了传统 SSE 双端点架构的痛点。

2. 工作机制

以统一接口 POST /xxx 为例:

  • 简单业务请求:服务端直接返回普通 JSON 响应,连接即刻关闭,和传统接口无区别

  • 流式交互请求:服务端切换响应模式,返回 text/event-stream 类型的 SSE 数据流,持续分段推送数据

简单来说:同一个接口,按需切换「普通短响应」和「流式长响应」

3. 核心优势(对比传统 SSE)

  • 单端点统一管理:无需维护两套接口,鉴权、CORS、路由、日志统一配置,运维成本大幅降低

  • 天然无状态:摒弃会话粘连需求,完美适配负载均衡、分布式集群,支持水平无限扩展

  • 兼容性极强:流式场景复用成熟的 SSE 数据格式,非流式场景兼容标准 HTTP 响应,无需自定义协议

4. 广义延伸

狭义的 Streamable HTTP(MCP 规范)默认使用 SSE 作为流式载体;而广义上,所有基于 HTTP Chunked 分块、分段返回数据的模式(如 NDJSON 流式输出),都可以统称为流式 HTTP。

四、核心区别:一张表彻底分清

很多人混淆的核心原因:SSE 是「数据格式+浏览器API标准」,Streamable HTTP 是「传输架构模式」,二者并非对立,而是互补组合

对比维度 SSE Streamable HTTP
标准属性 W3C 官方通用技术标准 MCP 定义的传输架构,非通用互联网标准
架构模式 传统双端点(GET长连+POST上行) 现代化单端点统一架构
数据格式 固定 text/event-stream 标准格式 按需兼容:普通JSON 或 SSE流式格式
扩展能力 依赖会话粘连,集群扩展困难 无状态设计,完美适配分布式部署
客户端适配 浏览器原生 EventSource 支持 需通过 Fetch + ReadableStream 手动解析

五、破除3个常见认知误区

误区1:Streamable HTTP 取代了 SSE

错误。被淘汰的是「传统 SSE 双端点架构」,SSE 的数据格式、流式能力依然是 Streamable HTTP 的核心载体,并未被取代。

误区2:SSE 和 Streamable HTTP 是二选一的技术

错误。二者层级不同:SSE 是数据传输格式与协议规范,Streamable HTTP 是整体通信架构,现代开发中通常是「Streamable HTTP 架构 + SSE 数据流」的组合使用。

误区3:Streamable HTTP 只能用 SSE 格式

错误。狭义 MCP 规范优先使用 SSE,广义流式 HTTP 支持任意自定义分块格式,灵活性更高。

六、业务场景选型建议

  • 简单单向推送场景(消息通知、大屏更新):直接使用原生 SSE,开发简单、原生支持重连,性价比最高

  • 复杂流式交互场景(大模型对话、异步任务、MCP 服务):优先选择 Streamable HTTP 架构,统一接口、便于运维和集群扩展

  • 需要自定义流式格式(二进制传输、自定义分隔符):使用广义流式 HTTP,放弃 SSE 固定格式,灵活定制化

七、总结

  1. SSE 是「流式数据的标准语法」,定义了服务端如何向客户端推送流式数据,是底层能力;

  2. Streamable HTTP 是「流式通信的架构方案」,优化了接口设计、解决了传统 SSE 扩展难题,是上层架构;

  3. 现代流式开发的最优解:基于 Streamable HTTP 架构,复用 SSE 标准数据流,兼顾规范性、灵活性和可扩展性。

PLUSZZZ*ZHANGJIA*