HTTP非流式请求 vs HTTP流式请求

文章目录

HTTP 非流式请求 vs 流式请求

一、核心区别
  1. 非流式请求(传统HTTP请求):

    • 客户端发送完整请求 → 服务端处理 → 返回完整响应
    • 数据一次性完整传输
    • 连接立即关闭
    • 适用于普通API接口
  2. 流式请求(Streaming Request):

    • 建立持久连接通道
    • 服务端可持续分块发送数据
    • 客户端可实时处理数据
    • 适用于实时聊天、大文件传输、日志流等场景

服务端代码示例(Node.js/Express)

非流式请求处理
javascript 复制代码
app.get('/api/normal', (req, res) => {
  // 一次性生成完整数据
  const data = Array.from({length: 5}, (_, i) => `数据块 ${i + 1}`);
  res.json({ 
    status: 'complete',
    data: data
  });
});
流式请求处理
javascript 复制代码
app.get('/api/stream', (req, res) => {
  // 设置流式响应头
  res.setHeader('Content-Type', 'text/plain; charset=utf-8');
  res.setHeader('Transfer-Encoding', 'chunked');

  // 模拟持续发送数据
  let count = 0;
  const interval = setInterval(() => {
    if (count++ < 5) {
      res.write(`数据块 ${count}\n`);
    } else {
      clearInterval(interval);
      res.end(); // 结束流
    }
  }, 1000);
});

客户端请求示例

非流式请求(浏览器fetch)
javascript 复制代码
fetch('/api/normal')
  .then(response => response.json())
  .then(data => {
    console.log('完整数据:', data);
  });
流式请求处理(浏览器fetch)
javascript 复制代码
fetch('/api/stream')
  .then(async response => {
    const reader = response.body.getReader();
    const decoder = new TextDecoder();

    while(true) {
      const { done, value } = await reader.read();
      if(done) break;
      console.log('收到数据块:', decoder.decode(value));
    }
  });

Python客户端示例(Requests库)

非流式请求
python 复制代码
import requests

response = requests.get('http://localhost:3000/api/normal')
print("完整响应:", response.json())
流式请求处理
python 复制代码
import requests

with requests.get('http://localhost:3000/api/stream', stream=True) as r:
    for chunk in r.iter_content(chunk_size=None):
        if chunk:
            print("实时数据:", chunk.decode('utf-8'))

关键特性对比

特性 非流式请求 流式请求
响应方式 一次性完整返回 持续分块返回
内存占用 需要完整加载数据 按需处理数据块
延迟 等待完整数据处理 首字节到达即可处理
适用场景 常规API请求 实时数据/大文件传输
连接持续时间 立即关闭 保持长连接
客户端处理复杂度 简单 需要特殊处理逻辑

注意事项

  1. 流式请求需要设置正确的响应头(Transfer-Encoding: chunked
  2. 客户端需要处理连接中断和重连逻辑
  3. 服务端要合理控制并发连接数
  4. 浏览器端需注意跨域问题(CORS配置)
  5. 流式传输更适合使用WebSocket/SSE等专业协议的场景需要考虑技术选型
相关推荐
小北方城市网10 小时前
第1课:架构设计核心认知|从0建立架构思维(架构系列入门课)
大数据·网络·数据结构·python·架构·数据库架构
黄焖鸡能干四碗10 小时前
信息安全网络安全评估报告(WORD)
大数据·网络·人工智能·安全·web安全·制造·需求分析
m0_7381207210 小时前
应急响应——知攻善防靶场Linux-1详细应急过程
linux·运维·服务器·网络·web安全·ssh
RECRUITGUY10 小时前
通信 - WIFI
网络·智能路由器
GHL28427109011 小时前
无法连接服务端socket
linux·服务器·网络
慕容雪_11 小时前
运维笔记-网络【属性】-【共享】中没有【家庭网络连接(H)】的选项
运维·网络·共享
线束线缆组件品替网13 小时前
Amphenol LTW 防水线缆 IP67/IP68 结构解析
运维·网络·人工智能·汽车·硬件工程·材料工程
LaoZhangGong12313 小时前
学习TCP/IP的第1步:ARP数据包
网络·stm32·学习·tcp/ip·以太网·arp·uip
LaoZhangGong12313 小时前
学习TCP/IP的第2步:ICMP数据包
网络·网络协议·学习·tcp/ip·以太网
liulilittle13 小时前
VEthernet 框架实现 tun2socks 的技术原理
网络·windows·c#·信息与通信·通信