使用多个范围的HTTP请求返回HTTP/1.1 200 OK

3

我正在向服务器发送一个http请求,该请求请求一张图片,但是使用了多个范围的range header。请求文本如下:

GET /images/nav_logo102.png HTTP/1.1
Host: www.google.com.eg
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Accept-Language: en-us,en;q=0.5
Cookie: PREF=ID=8aacc11c670a5a37:U=cba349de64cbf880:FF=0:LD=en:TM=1310392358:LM=1327944471:S=zc8_vfTdF5U3C-XN; NID=56=15iHWUMVXBGpdEkEcMCeu32GUL6GlK3aEB5vmocRT4kdILhwGpe9mn6DqDrnZBYWJzA2g4YzfXP8IP3tH7Hw4CzC6FwDrV3uqgv3XhCqmrWI0TBD52Vs3nbdth5YzkOR; SID=DQAAAMUAAAC5feWAhXsCT9NT6ObU32dOLBTU_KtRzxc7Ug6QWIhQW_bpXNvzQtoddtt-a2BbUefv89ZjwNwgrgCiCse3INYkeCyfR7PVPaoDPEmUWQ_0sHXBgbf5U0JBg0XxT8KZMmY9kLOZfEKGg0UGtfNNk8uJKWwPXWlkCYjGalQFyVinUNwiYqayYHGvnA0vtiftBCgqnpHawkyVWoo9hCk3vfDKrRHSdO-GQZoxbL21VlH2dbsJJrnJBaVlR-y8KTg14eLgYpt2swZJxcVZwHThhaF-; HSID=AJLTtk1qkIE6L4aLe; GZ=Z=1
User-Agent: Mozilla/5.0 (Windows NT 6.0; rv:5.0) Gecko/20100101 Firefox/5.0
Range: bytes=2048-4095,4096-6143,6144-8191,8192-10239,10240-12287,12288-14335,14336-16383,16384-18431,18432-20479,20480-22527,22528-24575,24576-26623,26624-26722

但是服务器响应了

HTTP/1.1 200 OK

发送整个图像,如果我尝试使用仅一个范围执行相同操作,则会成功,且仅获取请求的范围。有任何想法应该如何进行请求吗?

1个回答

4
你应该在最后一个标题后添加 \r\n\r\n。
请求:
GET /images/djsBox_2.jpg HTTP/1.1\r\n
Range: bytes=0-2,10-20\r\n
Host: www.djsoft.net\r\n
Accept: */*\r\n
\r\n

我使用 WFetch 工具进行了检查,响应为 HTTP/1.1 206 Partial Content\r\n 而服务器实际上返回了2部分数据:
Accept-Ranges: bytes\r\n
Content-Length: 196\r\n
Content-Type: multipart/byteranges; boundary=4b9e42cd78baa9\r\n
\r\n
\r\n
--4b9e42cd78baa9\r\n
Content-type: image/jpeg\r\n
Content-range: bytes 0-2/4543\r\n
\r\n
яШя\r\n
--4b9e42cd78baa9\r\n
Content-type: image/jpeg\r\n
Content-range: bytes 10-20/4543\r\n
\r\n
\x000\x001\x001\x001\x000`\x000`\x000\x000я\r\n
--4b9e42cd78baa9--\r\n

我已经在最后一个标题后面有了 \r\n\r\n ... 只是由于“代码示例”格式而没有显示出来。 - Darth Plagueis
如果你的所有范围加起来等于整个文件,那么结果代码将是200。如果只留下前两个范围会发生什么? - djsoft
我甚至尝试了 http 1.1 标准中使用的 Range: bytes=0-0,-1 的示例,但结果仍然相同。 - Darth Plagueis
你有没有一个可以展示多个范围请求的示例请求?我只能找到包含一个范围的请求。 - Darth Plagueis
我发现有时服务器会响应HTTP/1.1 200,有时会响应HTTP/1.1 206,我不知道为什么会这样发生...但即使我请求同一个文件,也会出现这种情况。 - Darth Plagueis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接