DoubleLi

qq: 517712484 wx: ldbgliet

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  4737 随笔 :: 2 文章 :: 542 评论 :: 1615万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

http协议里的chunked编码与测试

如果有写过http下载的人,或多或少了解一点chunked编码的传输方式。例如笔者最初不知道这个http传输方式,以前能行的代码有一天就突然不行了,抓包才发现数据异样。

chunked编码

  分块传输编码(Chunked transfer encoding)是只在HTTP协议1.1版本(HTTP/1.1)中提供的一种数据传送机制。以往HTTP的应答中数据是整个一起发送的,并在应答头里Content-Length字段标识了数据的长度,以便客户端知道应答消息的结束。

好处

  1. 对于动态生成的应答内容来说,内容在未生成完成前总长度是不可知的。因此需要先缓存生成的内容,再计算总长度填充到Content-Length,再发送整个数据内容。这样显得不太灵活,而使用分块编码则能得到改观。
  2. 分块传输编码允许服务器在最后发送消息头字段。例如在头中添加散列签名。
  3. 对于压缩传输传输而言,可以一边压缩一边传输。

格式

  如果在http的消息头里Transfer-Encoding为chunked,那么就是使用此种编码方式。接下来会发送数量未知的块,每一个块的开头都有一个十六进制的数,表明这个块的大小,然后接CRLF("\r\n")。然后是数据本身,数据结束后,还会有CRLF两个字符。有一些实现中,块大小的十六进制数和CRLF之间可以有空格。
  最后一块的块大小为0,表明数据发送结束。最后一块不再包含任何数据,但是可以发送可选的尾部,包括消息头字段。消息最后以CRLF结尾。

  • 抓包截图

如何测试支持chunked编码

  如何测试自己的程序支持接收这种编码方式的数据呢?第一想到的当然是配下服务器,使其固定以这种方式发数据,但是没有搜索到如果把apache配成这个模式。好在强大的Stack Overflow里找到了有用信息。
  http://www.httpwatch.com/httpgallery/chunked/chunkedimage.aspx 这个页面就是chunked编码传输的。只需要测试看能否正确下载这个页面就可以了,分块发送时服务器是每0.1s发送1k的数据过来。
  

参考
维基百科:https://zh.wikipedia.org/wiki/%E5%88%86%E5%9D%97%E4%BC%A0%E8%BE%93%E7%BC%96%E7%A0%81

posted on   DoubleLi  阅读(945)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2017-07-28 webrtc学习资源
2017-07-28 HTML5视音频标签参考
2017-07-28 ffmpeg 翻译文档
2017-07-28 音频编码器
2017-07-28 opensource mcu
2017-07-28 无法解析的外部符号 "public: static void __cdecl std::_String_base::_Xran(void)" (?_Xran@_String_base@std@@SAXXZ)"
2016-07-28 LibCurl HTTP部分详细介绍
点击右上角即可分享
微信分享提示