Streamable HTTP

Streamable HTTP 是一种基于 HTTP 的流式传输机制,它允许客户端和服务器之间通过 HTTP 连接持续交换数据,而不是像传统 HTTP 请求那样"一问一答"。它最常出现在现代 AI Agent、实时 API、消息推送等场景中。

简单理解:

普通 HTTP:客户端发一个请求,服务器返回一个完整响应。

Streamable HTTP:客户端发一个请求,服务器可以边生成边返回数据,客户端也可以持续发送或接收数据。


1. 传统 HTTP 是什么样?

例如:

客户端:

复制代码
GET /user/100

服务器:

复制代码
HTTP/1.1 200 OK

{
  "id":100,
  "name":"Tom"
}

流程:

复制代码
Client  ---- request ----> Server

Client  <--- response ---- Server

请求结束,连接通常结束。


2. Streamable HTTP 是什么样?

例如 AI 对话:

你问:

复制代码
请写一个Java程序

服务器生成答案可能需要 10 秒。

传统 HTTP:

复制代码
请求
 |
 |
等待10秒
 |
返回完整答案

用户体验:

复制代码
[等待........]
[完整文字一次出现]

Streamable HTTP:

复制代码
请求
 |
服务器开始生成
 |
返回:
"public class"
 |
返回:
" HelloWorld {"
 |
返回:
" public static void main"
 |
返回:
"}"

类似 ChatGPT 输出文字:

复制代码
public class HelloWorld {

    public static void main(String[] args) {

        System.out.println("Hello");

    }

}

是一点一点出现的。


3. Streamable HTTP 和普通 HTTP 的区别

传统HTTP Streamable HTTP
响应方式 一次性返回 持续返回
数据大小 适合小数据 适合大量数据
延迟
连接 短连接为主 长连接
服务器主动推送 困难 容易
典型场景 网页API AI、实时数据

4. Streamable HTTP 常见实现方式

方式1:Chunked Transfer Encoding

HTTP/1.1 支持:

复制代码
Transfer-Encoding: chunked

服务器:

复制代码
HTTP/1.1 200 OK
Transfer-Encoding: chunked


5
hello

6
 world

数据分块发送。


方式2:SSE(Server-Sent Events)

现在很多 AI API 使用:

复制代码
Content-Type: text/event-stream

服务器:

复制代码
data: Hello

data: world

data: !

特点:

  • 单向
  • Server → Client
  • 基于 HTTP
  • 浏览器支持很好

例如:

复制代码
浏览器
   |
   | HTTP Request
   |
服务器
   |
   | data: token1
   | data: token2
   | data: token3

方式3:HTTP Streaming

服务器保持连接:

复制代码
Client
 |
 | GET /stream
 |
Server

持续发送:

message1

message2

message3

5. Streamable HTTP 和 WebSocket 的区别

很多人会疑惑:

"那它和 WebSocket 有什么区别?"

确实很像。

WebSocket

建立:

复制代码
HTTP Upgrade

HTTP
 |
 | upgrade
 ↓

WebSocket

之后:

复制代码
Client <===========> Server

双向实时通信

双方都可以随时发送。

例如:

  • 聊天软件
  • 游戏
  • 股票行情

Streamable HTTP

还是 HTTP:

复制代码
Client
 |
 | HTTP Request
 |
Server
 |
 | Streaming Response
 |
Client

主要特点:

  • 兼容 HTTP 基础设施
  • 更容易穿过防火墙
  • 更适合 API

简单比较:

Streamable HTTP WebSocket
协议 HTTP WebSocket
方向 通常服务器流式返回 双向
复杂度
浏览器支持 很好 很好
代理兼容 稍差
实时性 较好 最好

6. 在 AI 场景中的应用

现在大模型 API 大量使用 Streamable HTTP。

比如:

OpenAI API:

请求:

http 复制代码
POST /v1/chat/completions

{
 "stream": true,
 "messages":[
   {
    "role":"user",
    "content":"介绍一下Java"
   }
 ]
}

服务器返回:

复制代码
data:
{
 "delta":"Java"
}

data:
{
 "delta":"是一种"
}

data:
{
 "delta":"编程语言"
}

客户端不断接收。


7. 与JSON-RPC 2.0 有什么关系?

这个联系很有意思。

JSON-RPC 2.0 本身只定义:

"消息格式"

例如:

请求:

json 复制代码
{
 "jsonrpc":"2.0",
 "method":"add",
 "params":[1,2],
 "id":1
}

返回:

json 复制代码
{
 "jsonrpc":"2.0",
 "result":3,
 "id":1
}

但是:

JSON-RPC 不规定传输协议。

所以它可以运行在:

复制代码
JSON-RPC
    |
    +--- HTTP
    |
    +--- WebSocket
    |
    +--- Streamable HTTP
    |
    +--- TCP

例如:

复制代码
MCP(Model Context Protocol)
        |
        |
 JSON-RPC 2.0
        |
        |
 Streamable HTTP

很多 AI Agent 架构就是这样:

复制代码
AI Client

    |
    | JSON-RPC messages
    |
    | Streamable HTTP
    |
    ↓

AI Tool Server

总结一句:

Streamable HTTP = 在 HTTP 上实现持续数据流传输的一种方式。它让服务器可以边产生数据边发送,而不用等待整个结果生成完。它常用于 AI 大模型流式输出、实时通知、日志流、MCP 等现代应用。

相关推荐
小新讲网安1 小时前
WiFi安全攻防实战:WPA3新协议与传统破解技术全解析
开发语言·网络·安全·php·漏洞·nmap·漏洞检测
清水白石0088 小时前
Python 死锁排查全攻略:从线程卡死到锁依赖定位与工程化修复
linux·网络·python
游戏开发爱好者89 小时前
带签名时间戳接口的重放与压力测试实战,用动态值在发送前现算签名
网络协议·计算机网络·网络安全·ios·adb·https·压力测试
TechWayfarer9 小时前
批量查IP归属地,在线API、脚本、离线库怎么选?三种方案实测对比
网络·python·网络协议·tcp/ip
小小龙学IT10 小时前
Boost.Beast 深度实战:基于 Asio 的开源 C++ HTTP/WebSocket 协议库
c++·websocket·http
ryan_99613 小时前
MCP Transport 完整指南:stdio 与 Streamable HTTP 到底怎样传消息
网络·网络协议·http
数据知道16 小时前
网络安全实战:子域名接管实战——从 CNAME 配置错误到完全控制
网络·安全·web安全·网络安全
lf132102716 小时前
用 JSON Schema 管装修节点记录:从照片台账到可校验工程数据
网络·数据库·人工智能·经验分享·物联网·json·智能家居
LayZhangStrive16 小时前
后端通识 - 远程服务调用RPC
网络·网络协议·rpc·sentinel·openfeign·远程服务调用
华清远见成都中心18 小时前
FreeRTOS事件组(Event Group)的工作机制分析
服务器·网络·网络协议