您好。感谢您使用 OSS 和反馈。
针对这个问题,我们本地使用 axel 工具做了测试,版本为 2.16.1,os 为 ubuntu 。分别通过 axel 和 curl 对下载的数据做 md5 对比,其值都是一样的。
具体的测试如下,
===================
测试命令 axel -n 4 -o axel-download-2.data
http://skyranch-02.oss-cn-hangzhou.aliyuncs.com/curl.zip 4 个线程同时下载。
抓包后,看到一共有 5 个 Get 请求
(1) GET /curl.zip Range: bytes=1- 返回 Content-Length: 330978 , 报文的数据只返回了差不多 0x446C 数据
(2) GET /curl.zip bytes=165489-248233 返回 Content-Length: 82745 ,
(3) GET /curl.zip 返回 Content-Length: 330979 , 报文的数据只返回了差不多 0x2958c ( 169556 ) 数据, 涵盖 0- 165489 范围
(4) GET /curl.zip bytes=248234-330978 返回 Content-Length: 82745
(5) GET /curl.zip bytes=82744-165488 返回 Content-Length: 82745
测试文件长度为 330979,330979/4 = 82744.75 ,分段为 82745, 分别通过 axel 和 curl 对下载的数据做 md5 对比,其值都是一样的。
大概推出,这个工具的做法:
(1) 请求为获取到 文件的 大小。通过 ranget 1- 模式获取 文件大小 比 head object 更具有通用性
(2) - (5) 为 多线程请求,正好有 4 个并发 请求,最开始的请求 通过非 range 方式请求,读数据时,只读 需要的部分。其它并发按照 分片大小请求。
===================
想和您确认下,您使用的 axel 工具是什么版本, 测试文件的大小,以及 用到的 axel 是不是 同一个?
再次感谢您的反馈!