一、Streamable HTTP 传输层设计革新
1. 核心设计思想
协议融合 :将 HTTP/1.1、HTTP/2 与 SSE 协议特性深度整合
动态协商 :通过 HTTP Header 实现传输协议动态协商(X-MCP-Transport
)
流式优先 :默认启用流式传输,支持半双工通信
背压控制 :基于 HTTP/2 流级流量控制实现智能速率调节
2. 与传统 HTTP+SSE 的对比
特性
传统 HTTP+SSE
Streamable HTTP
协议栈
单一 HTTP/1.1
HTTP/1.1/2 智能切换
流式支持
依赖特定 Content-Type
内置流式传输层
多路复用
不支持
HTTP/2 多路复用
背压控制
无
流级流量控制
协议协商
静态配置
动态 Header 协商
3. 协议栈架构
+----------------+ +-------------------+ +------------------+
| Application | | Streamable | | HTTP/2 |
| Layer (MCP) |<----| HTTP Transport |<----| Multiplexing |
| | | Layer | | (可选) |
+----------------+ +-------------------+ +------------------+
| | |
| JSON Events | Binary Frames |
v v v
+----------------+ +-------------------+ +------------------+
| TLS 1.3 | | HTTP/1.1 | | QUIC |
+----------------+ +-------------------+ +------------------+
二、Spring AI Alibaba Streamable HTTP 实现
1. 核心组件架构
Spring Boot App
StreamableHttpRequest
TransportAdapterManager
HTTP/1.1 Handler
HTTP/2 Handler
JSON Body Parser
Protobuf Frame Parser
StreamableResponseWriter
EventStreamEncoder
BinaryFrameEncoder
2. 关键代码实现
(1) 请求处理适配器
public class StreamableRequestAdapter {
private final TransportMode transportMode;
private final Decoder decoder;
private final Encoder encoder;
public StreamableRequestAdapter ( MCPRequest request) {
this . transportMode = determineTransportMode ( request) ;
this . decoder = createDecoder ( transportMode) ;
this . encoder = createEncoder ( transportMode) ;
}
private TransportMode determineTransportMode ( MCPRequest request) {
if ( request. getHeader ( "X-MCP-Transport" ) . equals ( "binary" ) ) {
return TransportMode . HTTP2;
}
return request. getBodySize ( ) > 1024 * 1024 ? TransportMode . SSE : TransportMode . JSON;
}
}
(2) 流式响应处理器
@RestController
@RequestMapping ( "/mcp/v1" )
public class MCPController {
@PostMapping ( "/execute" )
public void executeCommand (
@RequestBody MCPRequest request,
HttpServletResponse response) {
boolean isStreamable = request. getHeader ( "Accept-Stream" )
. contains ( "text/event-stream" ) ;
StreamableResponseWriter writer = new StreamableResponseWriter ( response) ;
writer. setContentType ( isStreamable ? "text/event-stream" : "application/json" ) ;
try ( StreamableContext ctx = new StreamableContext ( request, writer) ) {
executeTool ( ctx) ;
}
}
private void executeTool ( StreamableContext ctx) {
for ( int i = 0 ; i < 5 ; i++ ) {
ctx. writeEvent ( new MCPEvent ( )
. setStreamId ( UUID. randomUUID ( ) . toString ( ) )
. setChunk ( "Processing chunk " + i) ) ;
}
ctx. complete ( ) ;
}
}
3. Spring Boot 配置
spring :
ai :
mcp :
transport :
mode : AUTO
http2 :
enabled : true
max-concurrent-streams : 512
sse :
chunk-size : 1024
reconnect-interval : 5000
security :
enabled : true
token : ${
MCP_TOKEN: default- secret}
三、Higress 集成方案
1. 核心网关配置
http {
stream {
server {
listen 8080;
proxy_pass backend_servers;
proxy_protocol on;
proxy_http_version 2;
}
}
server {
listen 8081 http2;
location /mcp/v1 {
proxy_pass http://mcp-service;
proxy_set_header X-MCP-Transport $http_x_mcp_transport;
proxy_http_version 2;
# 流式传输优化
proxy_request_buffering off;
proxy_buffering off;
proxy_chunked_transfer_encoding on;
# 安全策略
proxy_set_header Authorization $http_authorization;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
2. WASM 智能路由模块
module. exports = {
name: 'mcp-stream-optimizer' ,
version: '1.0.0' ,
async requestReceived ( context ) {
const request = context. getRequest ( ) ;
const headers = request. getHeaders ( ) ;
if ( headers[ 'x-mcp-stream' ] === 'required' &&
headers[ 'content-type' ] === 'application/octet-stream' ) {
context. setTransportProtocol ( 'h2' ) ;
context. setResponseHeader ( 'X-MCP-Transport' , 'binary' ) ;
}
}
} ;