HTTP + SSE(旧的传输方式)
-
在早期 MCP 规范(如版本 2024-11-05)中,支持一种基于 HTTP POST + SSE(Server-Sent Events)组合的传输方式。 (ceposta Technology Blog)
-
其典型模式是:
- 客户端通过 HTTP GET 请求连接一个 SSE 端点(如
/events
),服务器在这个连接上持续推送事件(server → client) - 客户端通过 HTTP POST 到一个消息端点(如
/message
)向服务器发消息(client → server) - 因此传输是「双通道」:一个专用于服务器推送,一个专用于客户端发送。 (ceposta Technology Blog)
- 客户端通过 HTTP GET 请求连接一个 SSE 端点(如
-
优点包括:支持服务器向客户端持续推送事件(如通知、更新),适合 "server→client 流" 的场景。
-
缺点包括:
- 实现上稍微复杂,因为需要两个不同端点(一个 GET SSE,一个 POST 消息)
- 因为是专门为 SSE 设计,可能在代理、负载均衡、重连机制、ID 跟踪等方面有更多边界条件要处理。
-
在 MCP 规范中,这种方式现在 被标记为过时 (deprecated) ,推荐采用新的方式。 (Model Context Protocol)
Streamable HTTP(新的推荐传输方式)
-
在 MCP 最新规格(2025-06-18 版)中,明确指出:Streamable HTTP 传输 取代 HTTP+SSE。 (Model Context Protocol)
-
特点如下:
- 服务器提供一个 单一 HTTP 端点 (称为 "MCP endpoint")同时支持 HTTP POST 和 HTTP GET 方法。 (Model Context Protocol)
- 客户端向该端点用 POST 发送 JSON-RPC 请求/通知/响应。服务器可以直接同步返回一个 JSON 响应 (
Content-Type: application/json
) 或者返回一个Content-Type: text/event-stream
来启动 SSE 流。 (Model Context Protocol) - 客户端也可以通过 GET 请求打开 SSE 流,从而实现服务器向客户端主动推送消息(如通知、请求)而无需先发送 POST。 (Model Context Protocol)
- 支持断线重连、可选的 "Last-Event-ID" 机制来恢复消息流。 (Model Context Protocol)
- 安全建议:必须校验
Origin
头、使用认证、当本地部署时只绑定 localhost 等。 (Model Context Protocol)
-
换句话说,Streamable HTTP 把传统的双端点 SSE 模式 "合并"并简化为一个端点,同时 仍然支持 SSE 流式推送(即 server→client)作为一种可选机制。
-
因此,它具备更大灵活性:既可以用传统请求-响应,也可以在同一端点启动流,再进行持续推送。
主要区别
下面是一个对比摘要:
特性 | HTTP + SSE(旧) | Streamable HTTP(新) |
---|---|---|
端点结构 | 通常两个不同端点:一个 GET 用于 SSE 流,一个 POST 用于客户端发送 | 一个统一端点同时支持 POST(发送)和 GET 或 POST 启动 SSE(流) |
客户端发送请求 | POST 到消息端点 | POST 到 MCP 端点 |
服务器推送 / 流式消息 | 通过 SSE 流(在 GET 的连接)推送 | 通过同一个端点,可使用 SSE 流;也可简单 JSON 响应 |
支持情况 | 主要是 server→client 推送 + client→server 请求,结构稍重 | 更灵活:支持同步响应 + 可选流模式,连接结构更简化 |
适用场景 | 较早实现,专门用于需要 server→client 流的情况 | 现代推荐,适合远程、多客户端、可扩展部署 |
当前状态 | 被标记为 "deprecated" 在 MCP 新版本中 (Model Context Protocol) | 推荐用于新实现,同时保留与旧客户端兼容机制 |
为什么做这个变化/优点
- 简化服务端/客户端的实现:一个端点而不是两个,更容易部署、版本控制、监控。
- 更统一的连接模型:无论是简单请求‐响应还是流式消息,都通过同一个通道。
- 支持更多场景:远程服务、多客户端连接、断线恢复机制、生成工具、通知推送等都更灵活。
- 兼顾向后兼容:旧的 HTTP+SSE 客户端仍能连接,服务器可以继续支持以保障兼容。 (Model Context Protocol)
向后兼容 (Backwards Compatibility)
- MCP 规范明确指出:为了支持旧客户端/服务器,服务器如果想要兼容旧的 HTTP+SSE 方式,应当同时提供旧的 SSE 端点(以及旧的 POST 端点)和 新的 MCP 端点。 (Model Context Protocol)
- 客户端若要兼容旧服务器:先尝试 POST 到服务器 URL;如果失败(比如 405 或 404),则尝试 GET 去开启 SSE 流,并观察
endpoint
事件,然后切换到旧的模式。 (Model Context Protocol)
总结一句话
旧的 "HTTP + SSE" 是一种将客户端请求 (POST) 和服务器推送 (SSE) 分开的模型;而新的 "Streamable HTTP" 是一个更现代、统一且灵活的模型 ------ 通过一个端点支持客户端-→-服务器请求、可选的服务器-→-客户端流、以及简化的部署与管理。