Java 为什么HTTP响应没有给我指定的数据范围?
因此,我使用Range属性从url获取一个HTTP对象,例如.png。我找到整个对象的内容长度,然后划分每个范围的起始字节和结束字节。在最后一个范围内,一切正常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"); //
// 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