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

相关推荐
库玛西18 分钟前
计算机网络第三章:数据链路层
服务器·网络·计算机网络·考研·算法·面试
川石课堂软件测试23 分钟前
涨薪技术|0到1学会性能测试第9课-HTTP响应统计
数据库·功能测试·网络协议·http·kubernetes·单元测试·测试用例
竣达技术28 分钟前
Modbus 转 SNMP 协议转换器|自定义协议 + SNMP TRAP 主动上报
运维·服务器·网络·数据库·安全
优化Henry37 分钟前
LTE小区光路降质告警排查与处理实录
运维·网络·学习·5g·tdd
盛世宏博智慧档案42 分钟前
以太网温湿度变送器使用指南:从协议原理到部署的工程实践
网络·温湿度·传感器.
dghongcheng43 分钟前
喷涂机器人防护等级 IP67 标准解读
网络·机器人·喷涂·喷漆设备·自动喷涂线·自动喷涂
可信时间戳1 小时前
原创作品怎么申请版权?草稿、定稿、已发布、已授权,四个阶段四个做法
网络协议·http·https
话梅姐姐呀1 小时前
TCP/IP 架构各层的协议概述
人工智能·物联网·网络协议·tcp/ip·iot
余槐i2 小时前
加了Cookie yt-dlp仍报HTTP 403:3个容易漏的请求头差异
python·http·ffmpeg·开发工具·yt-dlp
电气工程师阿泰2 小时前
SCB12干式变压器安装流程梳理及采购适配建议
网络·scb12干式变压器