【CS.CN】优化HTTP传输:揭示Transfer-Encoding: chunked的奥秘与应用

文章目录

    • 0 序言
      • 0.1 由来
      • 0.2 使用场景
    • 1 `Transfer-Encoding: chunked`的机制
    • 2 语法 && 通过设置`Transfer-Encoding: chunked`优化性能
    • 3 总结
    • References

在这里插入图片描述

0 序言

0.1 由来

Transfer-Encoding头部字段在HTTP/1.1中被引入,用于指示数据传输过程中使用的编码方式。常见的值包括chunked。当使用chunked传输编码时,数据以分块的形式传输,每一块都有自己的大小标识,直到最后一个块(大小为0)表示传输结束。

可以将Transfer-Encoding: chunked机制比作分批次发送邮件:

  1. 情景设定
    • 你需要寄送一大批邮件,但一次性发送可能会超出邮件系统的限制。
  2. 正常流程
    • 你将所有邮件一次性发送,可能会遇到系统限制或传输失败。
  3. 使用Transfer-Encoding: chunked
    • 你将邮件分批次发送,每次发送一部分,直到所有邮件发送完毕。

0.2 使用场景

  • 大文件上传:当客户端需要上传大文件时,使用chunked传输可以避免一次性传输大量数据,减轻服务器压力。

  • 不确定的内容长度:在数据长度不确定的情况下,使用chunked传输可以方便地逐块发送数据。

    • 减少失败率:分块传输可以避免一次性传输大量数据导致的传输失败。
    • 提高效率:在数据生成过程中可以逐块发送数据,提高传输效率。

虽然Transfer-Encoding: chunked在某些情况下依然有用,但现代HTTP/2和HTTP/3协议中已经内置了多路复用和流控制机制,使其重要性有所降低:

  • HTTP/2和HTTP/3:现代协议已经支持多路复用和流控制,可以高效处理大数据传输。
  • 高效网络:现代网络基础设施的改进使得数据传输更加稳定和高效。

是否需要使用Transfer-Encoding: chunked取决于具体的应用场景:

  • 需要:在使用HTTP/1.1的环境中,尤其是需要传输大数据或不确定长度的数据时,依然可以使用。
  • 不需要:在使用HTTP/2或HTTP/3的环境中,已经不需要显式设置chunked传输。

1 Transfer-Encoding: chunked的机制

Transfer-Encoding 是一个请求和响应消息头,用于指示数据传输过程中使用的编码方式。常见的值包括chunked

规范中规定,chunked表示数据以分块的形式传输,每一块都有自己的大小标识,直到最后一个块(大小为0)表示传输结束。

例如,如果使用chunked,服务器可以逐块接收数据,而不是一次性接收所有数据。

Client Server HTTP Request (Headers with Transfer-Encoding: chunked) HTTP/1.1 200 OK Client sends request body in chunks HTTP Request Body (Chunk 1) HTTP Request Body (Chunk 2) HTTP Request Body (Final Chunk) HTTP Response Client Server

在分块传输中,Transfer-Encoding头可以显著影响数据传输的稳定性和效率。默认情况下,客户端可能会使用chunked传输,但明确设置可以确保行为一致。

客户端发送带有Transfer-Encoding: chunked头的请求,服务器接收数据时逐块处理。这种机制可以避免一次性传输大量数据导致的传输失败,提高传输效率。

在HTTP长连接(持久连接)中,客户端与服务器之间会复用同一个TCP连接以发送多个请求/响应对话。这通常会显著降低延迟和资源消耗。

注意: Transfer-Encoding: chunked机制与连接的长短无关。无论是短连接还是长连接,当客户端发送一个包含chunked头的请求时,都会触发分块传输的机制。

2 语法 && 通过设置Transfer-Encoding: chunked优化性能

目前规范中规定的值包括chunked

Transfer-Encoding: chunked

例如,curl库默认设置,或者在大文件上传时:

# 客户端发送带有 Transfer-Encoding: chunked 消息头的请求,逐块传输数据。

PUT /upload HTTP/1.1
Host: origin.example.com
Transfer-Encoding: chunked

通过设置Transfer-Encoding: chunked,可以避免一次性传输大量数据,提高传输稳定性和效率。

3 总结

通过正确使用Transfer-Encoding头,尤其是chunked传输,可以避免一次性传输大量数据导致的传输失败,提高传输稳定性和效率。

References

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/689491.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OlSoul系统调校程序v2024.06.05

软件介绍 OlSoul是一款能够适配用于Win各个系统的系统调校软件,OlSoul内置有众多调校功能可以直接使用,如有启用无线网络功能、启用打印机功能、系统快速休眠与休眠开关、快捷方式小箭头去除功能等,具体的调校功能多达几十项,可自…

vsCode双击文件才能打开文件,单击文件只能预览?

解决: 1、打开设置 2、搜索workbench.editor.enablePreview 3、更改为不勾选状态 4、关闭设置 效果: 现在单击一个文件时,将会在编辑器中直接打开,而非是预览状态。

51单片机-实机演示(LED点阵)

目录 前言: 一.线位置 二.扩展 三.总结 前言: 这是一篇关于51单片机实机LED点阵的插线图和代码说明.另外还有一篇我写的仿真的连接在这:http://t.csdnimg.cn/ZNLCl,欢迎大家的点赞,评论,关注. 一.线位置 接线实机图. 引脚位置注意: 1. *-* P00->RE8 P01->RE7 …

多源最短路径算法–Floyd算法

多源最短路径算法–Floyd算法 Floyd算法是为了求出每一对顶点之间的最短路径 它使用了动态规划的思想,将问题的求解分为了多个阶段 先来个例子,这是个有向图 Floyd算法的运行需要两个矩阵 最短路径矩阵 从当前这个状态看各顶点间的最短路径长度 例…

网络编程: 高级IO与多路转接select,poll,epoll的使用与介绍

网络编程: 高级IO与多路转接select,poll,epoll的使用与介绍 前言一.五种IO模型1.IO的本质2.五种IO模型1.五种IO模型2.同步IO与异步IO3.IO效率 二.非阻塞IO1.系统调用介绍2.验证代码 三.select多路转接1.系统调用接口2.写代码 : 基于select的TCP服务器1.封装的Socket接口2.开始写…

攻防世界---misc---Hear-with-your-Eyes

1、题目描述,下载附件,是一个.gz后缀的文件,查找资料发现,这个后缀是Linux系统的压缩包后缀。这里题目提示了用眼睛听音频,说明会有个音频,并且信息就在音频,可以用眼睛看到 2、将文件放在linux…

读书笔记-《软件定义安全》之二:SDN/NFV环境中的安全问题

第2章 SDN/NFV环境中的安全问题 1.架构安全 SDN强调了控制平面的集中化,从架构上颠覆了原有的网络管理,所以SDN的架构安全就是首先要解决的问题。例如,SDN实现中网络控制器相关的安全问题。 1.1 SDN架构的安全综述 从网络安全的角度&…

C++面向对象程序设计 - 文件操作与文件流

在实际应用中,常以磁盘文件作为对象,即能从磁盘文件读取数据,也能将数据输出到磁盘文件,磁盘是计算机的外部存储器,能够长期保留信息,能读能写,可以刷新重写等等。 在C中,文件操作通…

【Java】Java18的新特性

人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 目录 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌…

第四篇红队笔记-百靶精讲之Prime-wfuzz-wpscan-openssl enc

靶机Prime渗透 主机发现 nmap扫描与分析 目录爆破与模糊测试 dirb 目录扫描 dev secret.txt wfuzz发现 file参数 根据secret.txt-location.txt 和 file参数结合 secrettier360 根据filelocation.txt得到的on some other php page(改用之前扫到image.p…

mqtt-emqx:设置遗嘱消息

【pom.xml】 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.3.12.RELEASE</version> </dependency> <dependency><groupId>org.eclipse…

新书推荐:2.2.4 第11练:消息循环

/*------------------------------------------------------------------------ 011 编程达人win32 API每日一练 第11个例子GetMessage.c&#xff1a;消息循环 MSG结构 GetMessage函数 TranslateMessage函数&#xff1a;将虚拟键消息转换为字符消息 DispatchMessage函数…

Vue根据后端返回的tabList动态渲染组件信息

最近做了一个功能&#xff0c;后端根据配置信息&#xff0c;动态返回一个tabList&#xff0c;其中结构是List<String,Object> tabList; map里面的数据是 label、value 页面需要根据tablist动态渲染组件&#xff08;不同的tab都使用了组件进行了封装&#xff09; 实现效果…

解决福昕风腾PDF套装无法打印在线电子签章的方法

使用福昕风腾PDF套装打印在线电子签章文件时发现&#xff0c;在线盖的电子印章和签名却打印不出来&#xff0c;后现发现&#xff0c;按图中选项选择“文档”&#xff0c;即可完整打印文件内容及电子签章。留印。

【PL理论】(8) F#:列表高阶函数之 filter 函数 | 内联谓词函数 | 链式操作:先过滤再映射

&#x1f4ad; 写在前面&#xff1a;上一章中&#xff0c;我们详细讲解了列表的合并&#xff0c;本章我们来详细讲解一下列表的过滤&#xff0c;在 F# 中&#xff0c;过滤列表是指从列表中提取满足某个条件的元素&#xff0c;形成一个新的列表。这个操作通常使用 List.filter 函…

超详解——Python模块文档——小白篇

目录 1. Unix起始行 示例&#xff1a; 2. 对象和类型 示例&#xff1a; 3. 一切都是对象 示例&#xff1a; 4. 理解对象和引用 示例&#xff1a; 5. 理解对象和类型 示例&#xff1a; 6. 标准类型 示例&#xff1a; 7. 其他内建类型 示例&#xff1a; 8. 类型的类…

HTML静态网页成品作业(HTML+CSS)—— 保护环境环保介绍网页(1个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有1个页面。 二、作品演示 三、代…

基于zyyo主页与無名の主页合并二改,一款适合新手的个人主页

pengzi主页&#x1f64b; 项目地址 简洁的布局&#xff1a;主页应该有清晰的布局&#xff0c;包括一个简洁的导航菜单和易于浏览的内容区域。避免使用过多的花哨效果&#xff0c;保持页面简洁明了。 个人资料介绍&#xff1a;在主页上展示一段简短的个人介绍&#xff0c;包括…

bat脚本简介

一、bat脚本 概念定义 BAT 批处理是一种在 Windows 系统中用于将一系列命令组合成一个可执行文件&#xff08;.bat 文件&#xff09;的脚本技术。 允许用户将多个操作命令按顺序编写在一起。形成一个自动化执行的流程。批处理文件可以包含各种系统命令和程序调用。 如文件操作…

STM32_HAL库_外部中断

一、设置分组 stm32f1xx_hal_cortex.c 查看分组 五个形参&#xff0c;分组0~4 stm32f1xx_hal.c 设置了分组为2&#xff0c; 此工程就不需要再设置了 再回到stm32f1xx_hal_cortex.c 查看NVIC_SetPriorityGrouping的定义&#xff0c;若无法跳转&#xff0c;先编译一下&…