Java 为什么HTTP响应没有给我指定的数据范围?

Java 为什么HTTP响应没有给我指定的数据范围?,java,networking,http-headers,range,httpresponse,Java,Networking,Http Headers,Range,Httpresponse,因此,我使用Range属性从url获取一个HTTP对象,例如.png。我找到整个对象的内容长度,然后划分每个范围的起始字节和结束字节。在最后一个范围内,一切正常 // My specified range is: HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection(); urlConnection.setRequestProperty("Range", "bytes=22128-27657"); //

因此,我使用Range属性从url获取一个HTTP对象,例如.png。我找到整个对象的内容长度,然后划分每个范围的起始字节和结束字节。在最后一个范围内,一切正常

// My specified range is:
HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection();
urlConnection.setRequestProperty("Range", "bytes=22128-27657");

// It returns (Response Header):
HTTP/1.1 206 Partial Content
Thu, 17 Mar 2016 17:04:34 GMT
Downloaded Size: 5533
bytes
5529
bytes 22128-27656/27657 // !!! - Incorrect
Keep-Alive
但是,在每一个其他范围内,我都会得到我要求的数据:

// My specified range is:
HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection();
urlConnection.setRequestProperty("Range", "bytes=5533-11066");

// It returns (Response Header):
HTTP/1.1 206 Partial Content
Thu, 17 Mar 2016 17:04:34 GMT
Downloaded Size: 5533
bytes
5529
bytes 5533-11066/27657 // !!! - Correct
Keep-Alive
发生了什么?

标题的值定义为(缩写):

内容范围=字节内容范围
字节内容范围=字节单位SP字节范围resp
字节范围resp=字节范围“/”(完整长度/“*”)
字节范围=第一个字节位置“-”最后一个字节位置
完整长度=1*位
并说:

字节范围规范中的第一个字节pos值给出字节偏移量 范围中第一个字节的。最后一个字节的pos值给出 范围内最后一个字节的字节偏移量;也就是说,字节 指定的位置是包容性的字节偏移量从零开始。

因此,长度为
27657
,位置为
0-27656

当您请求
22128-27657
时,您请求的字节数超过了可用字节数,响应被截断为实际可用的字节数。

标题值定义为(缩写):

内容范围=字节内容范围
字节内容范围=字节单位SP字节范围resp
字节范围resp=字节范围“/”(完整长度/“*”)
字节范围=第一个字节位置“-”最后一个字节位置
完整长度=1*位
并说:

字节范围规范中的第一个字节pos值给出字节偏移量 范围中第一个字节的。最后一个字节的pos值给出 范围内最后一个字节的字节偏移量;也就是说,字节 指定的位置是包容性的字节偏移量从零开始。

因此,长度为
27657
,位置为
0-27656


当您请求
22128-27657
时,您请求的字节数超过了可用的字节数,响应被截断为实际可用的字节数。

字节范围为0索引。使用
bytes=22128-27657
,您需要从第22129个字节到第27658个字节,但只有27657个字节。您的两个示例都运行正常。

字节范围为0索引。使用
bytes=22128-27657
,您需要从第22129个字节到第27658个字节,但只有27657个字节。您的两个示例都运行正常。

所以我得到了所有数据?正确
22128-27656/27657
意味着从位置
22128
到文档末尾的所有剩余数据都已返回。因此,我获得了所有数据?正确
22128-27656/27657
表示从位置
22128
到文档末尾的所有剩余数据都已返回。
 first-byte-pos      = 1*DIGIT
 last-byte-pos       = 1*DIGIT