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

相关推荐
Johny_Zhao4 小时前
FreeRADIUS + 华为AC/AP + 802.1X/WPA2-Enterprise 无线认证对接部署完整指南
网络·网络安全·信息安全·ldap·radius·huawei·系统运维·centos8
天远API5 小时前
零信任架构实战:基于天远人企关联构建自动化图谱网关
网络·人工智能·架构·自动化
vipjx17 小时前
百度网盘限速怎么破?2026实测PanDownload多线程提速方案
网络·智能路由器
码匠许师傅8 小时前
【C++三方组件】cpp-httplib:一个头文件起 HTTP 服务
开发语言·c++·http
不会就选b8 小时前
Linux之应用层协议HTTP(二)
网络·网络协议·http
hasty8 小时前
只监听本机为何仍需鉴权?Cline Hub 的 WebSocket 信任边界解析
网络·websocket·网络协议
小小小小钰儿9 小时前
1.5-Python网络编程
开发语言·网络·python·web安全·计算机·网络安全
vipjx19 小时前
2026最新PanDownload复活版评测:告别百度网盘限速实测可用
网络·智能路由器
hasty10 小时前
01_新网络安全法下的软件漏洞治理
网络·安全·web安全
j7~10 小时前
【Linux网络编程】四十七.《Linux IO 模型详解:阻塞 IO、非阻塞 IO 与 IO 多路转接(select)》
linux·运维·网络·select·非阻塞io·阻塞io·i/o多路连接