MCP 服务 Streamable HTTP 和 SSE 的区别

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)
  • 优点包括:支持服务器向客户端持续推送事件(如通知、更新),适合 "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" 是一个更现代、统一且灵活的模型 ------ 通过一个端点支持客户端-→-服务器请求、可选的服务器-→-客户端流、以及简化的部署与管理。

参考链接:blog.christianposta.com/ai/understa...

相关推荐
rengang663 小时前
软件工程新纪元:AI协同编程架构师的修养与使命
人工智能·软件工程·ai编程·ai协同编程架构师
IT_陈寒4 小时前
Python+AI实战:用LangChain构建智能问答系统的5个核心技巧
前端·人工智能·后端
DIY机器人工房4 小时前
【嵌入式面试题】STM32F103C8T6 完整元器件解析 + 面试问题答案
stm32·单片机·面试·嵌入式·面试题·diy机器人工房
袁煦丞4 小时前
MoneyPrinterTurbo一键生成短视频:cpolar内网穿透实验室第644个成功挑战
前端·程序员·远程工作
亚马逊云开发者4 小时前
Amazon Bedrock AgentCore Memory:亚马逊云科技的托管记忆解决方案
人工智能
敖丙4 小时前
2025 AI Agent 元年:你还在用 AI 聊天,别人已靠“智能体”成为“超级个体”
程序员
言之。4 小时前
Chroma 开源的 AI 应用搜索与检索数据库(即向量数据库)
数据库·人工智能·开源
晴殇i4 小时前
前端鉴权新时代:告别 localStorage,拥抱更安全的 JWT 存储方案
前端·javascript·面试
来旺4 小时前
互联网大厂Java面试全解析及三轮问答专项
java·数据库·spring boot·安全·缓存·微服务·面试