HTTP 服务器为 Range HTTP GET 请求返回少 1 个字节

问题描述 投票:0回答:2

我正在实现 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 表示这可能是服务器上的一个错误。我只在文件的最后一个块上看到这个问题。

c++ c http sockets tcp
2个回答
0
投票

你的思维有 1 个错误。

我下载了你的整个文件。它的整个长度是

12243840
字节。 所以字节范围是
0-12243839

您的示例尝试下载字节数

12243840
,该字节数不存在。


0
投票

没有丢失任何字节。

Content-Range: bytes 8388608-12243839/12243840

12243839 是大小为 12243840 的内容的最大值

last-byte-pos
(请参阅标准),因为计数从索引 0 开始。

© www.soinside.com 2019 - 2024. All rights reserved.