当前位置: 首页 > news >正文

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

文章目录

      • HTTP 非流式请求 vs 流式请求
        • 一、核心区别
      • 服务端代码示例(Node.js/Express)
        • 非流式请求处理
        • 流式请求处理
      • 客户端请求示例
        • 非流式请求(浏览器fetch)
        • 流式请求处理(浏览器fetch)
      • Python客户端示例(Requests库)
        • 非流式请求
        • 流式请求处理
      • 关键特性对比
      • 注意事项

HTTP 非流式请求 vs 流式请求

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

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

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

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

非流式请求处理
app.get('/api/normal', (req, res) => {
  // 一次性生成完整数据
  const data = Array.from({length: 5}, (_, i) => `数据块 ${i + 1}`);
  res.json({ 
    status: 'complete',
    data: data
  });
});
流式请求处理
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)
fetch('/api/normal')
  .then(response => response.json())
  .then(data => {
    console.log('完整数据:', data);
  });
流式请求处理(浏览器fetch)
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库)

非流式请求
import requests

response = requests.get('http://localhost:3000/api/normal')
print("完整响应:", response.json())
流式请求处理
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等专业协议的场景需要考虑技术选型

相关文章:

  • 金融行业专题|某基金公司基于超融合信创平台支持人大金仓数据库的性能评测
  • 深入解析Tomcat目录结构
  • Grok 3 vs. DeepSeek vs. ChatGPT:2025终极AI对决
  • 【MATLAB中的图像数据结构】
  • 【奥卡姆剃刀原理-如何理解云计算和边缘计算 关键字摘取】
  • MATLAB下载安装教程(附安装包)2025最新版(MATLAB R2024b)
  • 网络安全之日志审计 网络安全审计制度
  • 山东大学软件学院ai导论实验之生成对抗网络
  • 【Python爬虫(71)】用Python爬虫解锁教育数据的奥秘
  • obj离线加载(vue+threejs)+apk方式浏览
  • DDNS-GO 动态域名解析
  • 基于YOLO11深度学习的医学X光骨折检测与语音提示系统【python源码+Pyqt5界面+数据集+训练代码】
  • 基于SpringBoot的“洪涝灾害应急信息管理系统”的设计与实现(源码+数据库+文档+PPT)
  • 【Java】I/O 流篇 —— 转换流与序列化流
  • 5分钟学习-什么事前端HTML文件
  • Python 网络爬虫实战全解析:案例驱动的技术探索
  • Linux-IPC-消息队列
  • Java 大视界 -- Java 大数据在智能物流路径规划与车辆调度中的创新应用(102)
  • C# Unity 唐老狮 No.2 模拟面试题
  • 36. Spring Boot 2.1.3.RELEASE 中实现监控信息可视化并添加邮件报警功能
  • 释新闻|印度宣布“掐断”巴基斯坦水源,对两国意味着什么?
  • 一图读懂|上海海关公布一季度数据:钢材出口增长超143%
  • 贵州赤水被指“整改复耕”存形式主义,当地部署耕地流出整改“回头看”
  • 《2025职场人阅读报告》:超半数会因AI改变阅读方向
  • 现场观察·国防部记者会|美将举行大演习“应对中国”,备战太平洋引发关注
  • 海关总署牵头部署开展跨境贸易便利化专项行动