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 等现代应用。

相关推荐
门思科技2 小时前
TKL + EB:重新定义 LoRaWAN 在存量设备改造中的价值,让传统设备快速接入物联网
网络·物联网
hai3152475432 小时前
九章芯片电路集成体系:密度矩阵逆向·全域均衡网络计算总框架
网络·线性代数·矩阵
DLYSB_3 小时前
《从零开始搭建机房轻量化“声光告警”系统:基于 HTTP API 与 TTS 的运维实践》
运维·网络协议·http·报警灯
芝麻馅汤圆儿3 小时前
跨三层环境(交换机vlan/vlanif配置)
网络
ZhengEnCi3 小时前
N3A-一个端口只能给一个程序使用吗?
网络协议
发光的沙子3 小时前
FPGA----配置根文件系统ip和mac地址
网络协议·tcp/ip·macos
wjql23 小时前
手机远程操控另一台手机的方法 手机可以远程操控手机吗
网络
奶油话梅糖3 小时前
锐捷常用命令速查表
java·网络·windows
rcms152702692183 小时前
AMAT 0190-32401 通讯模块
网络
范纹杉想快点毕业4 小时前
嵌入式串口通信协议设计与解析完全教程
网络