🎬 HoRain云小助手个人主页

 🔥 个人专栏: 《Linux 系列教程》《c语言教程

⛺️生活的理想,就是为了理想的生活!


⛳️ 推荐

前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。

专栏介绍

专栏名称

专栏介绍

《C语言》

本专栏主要撰写C干货内容和编程技巧,让大家从底层了解C,把更多的知识由抽象到简单通俗易懂。

《网络协议》

本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘,一起解密网络协议在运行中协议的基本运行机制!

《docker容器精解篇》

全面深入解析 docker 容器,从基础到进阶,涵盖原理、操作、实践案例,助您精通 docker。

《linux系列》

本专栏主要撰写Linux干货内容,从基础到进阶,知识由抽象到简单通俗易懂,帮你从新手小白到扫地僧。

《python 系列》

本专栏着重撰写Python相关的干货内容与编程技巧,助力大家从底层去认识Python,将更多复杂的知识由抽象转化为简单易懂的内容。

《试题库》

本专栏主要是发布一些考试和练习题库(涵盖软考、HCIE、HRCE、CCNA等)

目录

⛳️ 推荐

专栏介绍

1. 分块传输编码(Chunked Transfer Encoding)

2. 数据压缩(Content Compression)

3. 多部分上传(Multipart Upload)

优化补充方案

选择策略


img


1. 分块传输编码(Chunked Transfer Encoding)

  • 原理:将数据拆分为多个块(chunks)逐步传输,避免一次性加载全部数据到内存。
  • 适用场景
    • 流式传输(如实时日志、视频流)
    • 服务器动态生成数据时边生成边发送
  • 实现方法
    • 客户端请求:无需特殊设置,由服务器自动启用。
    • 服务器响应:需设置 Transfer-Encoding: chunked 头部。
    • 示例(Python Flask)
      from flask import Response
      
      @app.route('/stream')
      def stream_data():
          def generate():
              for chunk in large_data_generator():  # 假设这是大数据生成器
                  yield f"{len(chunk):X}\r\n{chunk}\r\n"
              yield "0\r\n\r\n"  # 结束标记
          return Response(generate(), headers={'Transfer-Encoding': 'chunked'})
      

2. 数据压缩(Content Compression)

  • 原理:压缩 HTTP Body 数据,减少传输体积。
  • 适用场景
    • 文本类数据(JSON/XML/HTML)
    • 带宽敏感的场景(如移动网络)
  • 实现方法
    • 客户端请求:在请求头中声明支持的压缩算法:
      Accept-Encoding: gzip, deflate, br
      
    • 服务器响应:选择客户端支持的算法压缩数据,并设置响应头:
      Content-Encoding: gzip
      
    • 示例(Nginx 配置)
      gzip on;
      gzip_types text/plain application/json;
      

3. 多部分上传(Multipart Upload)

  • 原理:将大文件分割为多个部分并发上传,最后合并。
  • 适用场景
    • 大文件上传(如视频、镜像文件)
    • 网络不稳定时支持断点续传
  • 实现方法
    • 客户端:将文件分块,用 multipart/form-data 格式上传。
    • 服务器:接收分块后按顺序合并。
    • 示例(JavaScript 分块上传)
      async function uploadFile(file) {
        const chunkSize = 5 * 1024 * 1024; // 5MB 分块
        for (let start = 0; start < file.size; start += chunkSize) {
          const chunk = file.slice(start, start + chunkSize);
          const formData = new FormData();
          formData.append('file', chunk);
          formData.append('chunkIndex', start / chunkSize);
          await fetch('/upload', { method: 'POST', body: formData });
        }
        await fetch('/merge', { method: 'POST', body: file.name });
      }
      

优化补充方案

  • HTTP/2 协议:启用多路复用(Multiplexing)减少连接开销,提升传输效率。
  • 断点续传:通过 Range 头部标记已传输的字节范围:
    Range: bytes=200-1000
    
  • 服务端流式处理:避免将完整数据加载到内存(如使用 Python 的 StreamingHTTPResponse)。

选择策略

方法 适用方向 优点 缺点
分块传输编码 服务器推送 实时性强,内存占用低 客户端需支持流式处理
数据压缩 双向 显著减少传输体积 压缩/解压消耗 CPU
多部分上传 客户端上传 支持断点续传和并发 实现复杂度较高

根据具体场景(上传/下载/实时流)和数据类型(文本/二进制)选择合适方案,亦可组合使用(如压缩 + 分块)。

❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐