http报文中chunked分块编码传输格式分析及c语言解压实现

本文介绍了HTTP报文中的chunked分块编码传输格式,并提供了C语言实现解压的方法。首先解释了chunked编码的用途和结构,接着详细阐述了数据包重组和解压的原理,包括关键函数的功能描述。最后,通过一个测试示例展示了如何使用该实现来处理chunked编码的HTTP响应数据。
摘要由CSDN通过智能技术生成

前面有一篇文章是关于使用zlib库函数解压以gzip压缩方式传输的http报文。里面提到了chunked分块传输格式,现在由于项目需要,做了这部分的研究,现在把成果记录下来。
首先介绍一下chunked分块传输格式。对于一般的http报文,使用Content-Length字段标明报文长度,但是对于那些无法事先确定报文大小的网页而言,就只能使用chunked编码方式。对于这种方式的报文,一般会使用transfer-coding字段标明是chunked分块传输格式。
Chunked编码使用若干个Chunk串连而成,由一个标明长度为0的chunk标示结束。对于使用gzip压缩格式的报文而言,http报文先被压缩后被分块,所以我们应该先把数据包重组,然后再进行解压。简单来说,其格式如下:
[Chunk大小][回车][Chunk数据体][回车]…(中间若干个chunk块)…[0][回车][footer内容(有的话)][回车]
最后一个chunk块长度为0,footer内容也一般为空。
下面举个例子,这是我用wireshark抓的一个数据包,头部的transfer-coding字段标明为chunked编码方式。“0d 0a 0d 0a”四个字节表示头部结束,接下来便是报文主体。“32 35”为第一个chunk块的长度,注意chunk-size是以十六进制的ASCII码表示的,所以其长度其实是十六进制的“25”,即37个字节。再接下来是第二个chunk块,然后注意“30 0d 0a 0d 0a”部分,30表示本chunk块长度为0,也即chunk串的结束标志。

0000-000F   48 54 54 50 2f 31 2e 31 20 32 30 30 20 4f 4b 0d   HTTP/1.1 200 OK.
0010-001F   0a 43 6f 6e 74 65 6e 74 2d 54 79 70 65 3a 20 74   .Content-Type: t
0020-002F   65 78 74 2f 70 6c 61 69 6e 0d 0a 54 72 61 6e 
  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值