所以我使用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
发生了什么事?
答案 0 :(得分:1)
Content-Range
标题的值定义为(缩写):
Content-Range = byte-content-range
byte-content-range = bytes-unit SP byte-range-resp
byte-range-resp = byte-range "/" ( complete-length / "*" )
byte-range = first-byte-pos "-" last-byte-pos
complete-length = 1*DIGIT
和section 2.1说:
first-byte-pos = 1*DIGIT
last-byte-pos = 1*DIGIT
byte-range-spec中的first-byte-pos值给出了字节偏移量 范围中的第一个字节。 last-byte-pos值给出了 范围中最后一个字节的字节偏移量;也就是说,字节 指定的职位是包容性的。 字节偏移从零开始。
因此,27657
的长度为0-27656
。
当您要求22128-27657
时,您要求的字节数多于可用字节数,并且响应将被截断为实际可用的字节数。
答案 1 :(得分:1)
字节范围为0索引。对于bytes=22128-27657
,您要求通过27658字节的第22129字节,但只有27657字节。您的两个示例都表现正常。