- 状态(Status): Final
- 类型(Type): Standards Track
- 创建(Created): 2025-10-22
- 作者(Author(s)): Jonathan Hefner (@jonathanhefner)
- Issue: #1699
摘要
本 SEP 提议对 Streamable HTTP 传输作出更改,以缓解关于长连接和可恢复性的问题。动机
Streamable HTTP 传输规范不允许服务器在计算结果的过程中关闭连接。换句话说,除非客户端断开,否则服务器必须维持可能长时间运行的连接。规范
当服务器启动一个 SSE 流时,它**必须(MUST)**立即发送一个由id 和空 data 字符串构成的 SSE 事件,以便让客户端准备好以该事件 ID 作为 Last-Event-ID 进行重连。
请注意,SSE 标准明确允许将 data 设为空字符串,并规定客户端侧的适当处理方式是记录 id 用于 Last-Event-ID,但在其他方面忽略该事件(即不调用事件处理回调)。
在服务器向客户端发送了一个事件 ID 之后的任何时刻,服务器都**可以(MAY)**随意断开。具体而言,MCP 规范的这一部分将从:
服务器在为收到的 JSON-RPC请求发送 JSON-RPC响应之前**不应当(SHOULD NOT)**关闭 SSE 流更改为:
如果服务器已经向客户端发送了带有事件 ID 的 SSE 事件,则它**可以(MAY)**在发送 JSON-RPC响应之前关闭连接如果服务器断开,客户端会将此次断开解释为与网络故障相同,并尝试重连。为防止客户端过度重连/轮询,服务器**应当(SHOULD)发送一个带有
retry 字段的 SSE 事件,指明客户端在重连前应等待多久。客户端必须(MUST)**尊重 retry 字段。
理由
服务器可以随意断开,避免长连接。发送retry 字段将防止客户端以不当的重连尝试反复冲击服务器。
向后兼容性
- 新客户端 + 旧服务器:无变化。无向后不兼容。
- 旧客户端 + 新服务器:客户端应将随意断开解释为与网络故障相同。
retry字段是 SSE 标准的一部分。如果客户端已经实现了正确的 SSE 恢复逻辑,则无向后不兼容。