我正在实现 HTTP 文件下载器。我正在尝试分块下载文件,每个块都是通过单独的线程下载的。
我只看到最后一块有问题。对于最后一个块,服务器返回的字节数比请求的字节数少 1 个字节。
HTTP 获取请求已发送:
GET /idman642build20.exe HTTP/1.1
Host: mirror2.internetdownloadmanager.com
Range: bytes=8388608-12243840
Connection: close
HTTP 获取响应:
HTTP/1.1 206 Partial Content
Date: Sat, 31 Aug 2024 18:08:40 GMT
Server: Apache/2.4.37 (AlmaLinux) OpenSSL/1.1.1k
Last-Modified: Tue, 20 Aug 2024 21:29:03 GMT
ETag: "bad380-620241d5e53f9"
Accept-Ranges: bytes
Content-Length: 3855232
Content-Range: bytes 8388608-12243839/12243840
Connection: close
Content-Type: application/octet-stream
您可以在上面看到,我请求范围 8388608-12243840 ,但服务器返回给我 8388608-12243839 ,即最后一个字节丢失。 chatGPT 表示这可能是服务器上的一个错误。我只在文件的最后一个块上看到这个问题。
你的思维有 1 个错误。
我下载了你的整个文件。它的整个长度是
12243840
字节。 所以字节范围是 0-12243839
。
您的示例尝试下载字节数
12243840
,该字节数不存在。
没有丢失任何字节。
Content-Range: bytes 8388608-12243839/12243840
12243839 是大小为 12243840 的内容的最大值
last-byte-pos
(请参阅标准),因为计数从索引 0 开始。