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等专业协议的场景需要考虑技术选型
相关推荐
bantinghy3 小时前
Linux系统TCP/IP网络参数优化
linux·网络·tcp/ip
wanhengidc4 小时前
云手机可以息屏挂手游吗?
运维·网络·安全·游戏·智能手机
一只小白菜~4 小时前
实战记录:H3C路由器IS-IS Level-1邻居建立与路由发布
运维·网络·计算机网络·智能路由器
kenwm4 小时前
家庭网络异常降速问题排查处理方案
网络·智能路由器
搬码临时工5 小时前
使用自定义固定公网URL地址远程访问公司内网OA办公系统,本地无需公网IP和专线让外网访问
网络·网络协议·tcp/ip
星马梦缘7 小时前
计算机网络6 第六章 应用层——解决“怎么发请求、怎么回响应”的问题(邮件整体传输流程)
网络·计算机网络·域名·ftp·dns·dhcp
@CLoudbays_Martin117 小时前
为什么动态视频业务内容不可以被CDN静态缓存?
java·运维·服务器·javascript·网络·python·php
东哥说-MES|从入门到精通8 小时前
Mazak MTF 2025制造未来参观总结
大数据·网络·人工智能·制造·智能制造·数字化
sheepwjl9 小时前
《嵌入式硬件(三):串口通信》
网络·嵌入式硬件·网络协议·串口通信
noravinsc9 小时前
RPC和HTTP的区别?
网络协议·http·rpc