Http chunk方式传输数据

Http协议

响应格式:

HTTP/1.1 200 OK\r\n
[HeaderKey]:[空格][HeaderValue]\r\n
[HeaderKey]:[空格][HeaderValue]\r\n
[HeaderKey]:[空格][HeaderValue]\r\n
......这里省略很多
\r\n
[数据区]


请求格式:

GET/POST[空格][相对或者绝对路径][空格]HTTP/1.1\r\n
[HeaderKey]:[空格][HeaderValue]\r\n
[HeaderKey]:[空格][HeaderValue]\r\n
[HeaderKey]:[空格][HeaderValue]\r\n
....
\r\n
[数据区]


数据区的长度由协议头Content-Length指定

***当数据区的长度太长时,若还是按照上面这种格式传输,则对方会收到不数据,用wareshark抓包时也看不到这条数据(Http,用Tcp过滤还是看得到的)

这时,就要使用Chunk方式传送啦


先来看一条Chunk的示例

Content-Disposition: attachment; filename="文件名":这个协议头是让浏览器下载文件
"Transfer-Encoding", "chunked":必需的。

Chunk的协议头里没有 Content-Length

数据区里的数据格式有变化:


可以从上图看出每段的chunk数据是以\r\n结尾的,那每段的开始呢?


圈出来的就是每段chunk数据的开始,这个\39\63\30不难看出,这是此段Trunk的长度,不包括表示长度的这几个字节,也不包括结尾的\r\n,这段长度的这几个字节是个字符串,没有固定长度,占1个字节到4个字节,至于5个以上字节应该也行,不过没必要吧,不要直接把长度写入,要先转成字符串后再写,这个问题搞了半天。




最后结尾是\30\r\n\r\n

这个\30是什么意思,不清楚,反正没有会报错了


知道了chunk方式传输格式,就可以针对地写代码了吧,自己做爬虫时经常遇到,整得脑壳大
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值