http的chunked编码

本文介绍了HTTP响应报文中chunked编码的工作原理,通过在头部指定chunked编码方式,然后使用十六进制数值指示每个数据块的长度,直到接收到长度为0的数据块表示结束。了解chunked编码有助于控制接收长度和避免连接阻塞。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

但远山长

云山乱

晓山青

之前在http响应报文的长度中讲了http响应报文是如何告知客户端他要接收的长度的,其中就讲到了“chunked”编码,那“chunked”编码具体怎么实现长度控制的呢?

首先看一下http的响应头:

HTTP/1.1 200 OK
Bdpagetype: 1
Bdqid: 0x8329f5fd0015bc7c
Cache-Control: private
Connection: Keep-Alive
Content-Type: text/html
Cxy_all: baidu+bb9179976040c4ccb6e0a0874e8067bc
Date: Sun, 06 Oct 2019 14:58:02 GMT
Expires: Sun, 06 Oct 2019 14:57:02 GMT
P3p: CP=" OTI DSP COR IVA OUR IND COM "
Server: BWS/1.1
Set-Cookie: BAIDUID=8B326F960B2A4633073E07FA262961F3:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: BIDUPSID=8B326F960B2A4633073E07FA262961F3; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: PSTM=1570373882; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: delPer=0; path=/; domain=.baidu.com
Set-Cookie: BDSVRTM=0; path=/
Set-Cookie: BD_HOME=0; path=/
Set-Cookie: H_PS_PSSID=1440_21124_18559_29523_29721_29568_29220_26350_22159; path=/; domain=.baidu.com
Strict-Transport-Security: max-age=172800
Vary: Accept-Encoding
X-Ua-Compatible: IE=Edge,chrome=1
Transfer-Encoding: chunked

注意到在末尾有一个Transfer-Encoding: chunked,表示该http报文通过chunked编码控制长度。

接下来看下报文内容:

bd8
<!DOCTYPE html>
<!--STATUS OK-->
...
...

bd8其实就是接下来的报文段的长度(十六进制数),也就是标记后续会发送的报文的长度。

其实就是“分块编码”,一个块发送结束后,会有一个新的十六进制字符串表示接下来的长度。

那怎么知道是结束呢?

也就是接收到的这个十六进制数是0。

这里有一张图片可以清除地描述整个报文:

img

注意到\r\n的位置!!!

有了这些知识我们就能根据chunked去控制接收长度并及时断开连接防止阻塞了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值