Response 的头部没有 Content-Length

本文讲述了在使用Okhttp框架从七牛服务器下载文件时遇到的响应中缺少Content-Length的问题。原因在于七牛服务器在进行gzip压缩时,首次请求可能不返回Content-Length,而后续请求才会有。解决办法包括在请求头中指定不进行gzip压缩或预先获取文件大小。文章还介绍了Fiddler抓包工具、Http下载原理和CDN的工作方式。
摘要由CSDN通过智能技术生成

文章目录
1. 背景
2. 原因
3. 解决方式
4. 知识点
4.1 Fiddler
4.2 Http
4.3 CDN
5.附录
5.1 请求&回包头部信息
1. 背景
使用Okhttp的框架,在七牛服务器上进行文件下载,发现一个奇怪的问题,在进行 Http 进行下载的时候,Response 的回包里面,偶尔会出现没有 Content-Length 的情况,导致无法准确的获取下载进度。

在查找问题的过程中,较深入的了解Http下载的流程和fiddler抓包工具的使用,并在与七牛的运维确定问题后,给出了我认为较合理的解决方案。

2. 原因
造成没有 Content-Length 的原因,是由于七牛的服务器没有返回这个字段,七牛方面给出的回复如下:

这边排查当请求头带有 Accept-encoding: gzip 时,第一次请求到某个节点时,会没有 content-length 头,第二次请求到相同节点,就会带这个头了。

当 CDN 节点需要做 gzip 压缩时,为加快第一次响应速度,会在做完 gzip 压缩后直接先响应内容,再计算 content-length ,这样第二次访问到该节点的时候,会把上次的 gzip 压缩内容和 content-length 都返回。
1
2
3
所以原因总结要点如下:

七牛服务器默认会对文本格式的文件进行 gzip 压缩,也只有文本格式的文件会出现返回的 Response 里面没有 Content-Length 的问题。(目前与

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值