通过指定Range下载部分内容
什么是指定HTTP Range下载内容
下载OSS中的大文件(超过100M)时,如果传输过程中受到网络环境影响,则会传输失败。这时,可以通过HTTP Range请求获取大文件的部分内容,示例如下。[$ByteRange]指请求资源的范围,单位为“Byte(字节)”。示例如下。
Range: bytes=0-499表示第0~499字节范围的内容。Range: bytes=500-999表示第500~999字节范围的内容。Range: bytes=-500表示最后500字节的内容。Range: bytes=500-表示从第500字节开始到文件结束部分的内容。Range: bytes=0-表示第一个字节到最后一个字节,即完整的文件内容。- OSS不支持多Range参数,即不支持指定多个范围。如果指定多个范围,OSS只返回第一个Range的数据,例如:
Range:bytes=0-499,500-999,OSS只返回0-499字节范围的内容。 - [$ByteRange]有效区间在0至
content-length - 1的范围内。
206并在响应头中包含Content-Range。如果HTTP Range请求不合法,或者指定范围不在有效区间,会导致Range不生效,响应返回值为200,并传送整个Object内容。如下为HTTP Range请求不合法的示例及错误说明。
此处假设Object资源大小为1000字节,Range有效区间为0~999。
Range: byte=0-499:格式错误,byte应为bytes。Range: bytes=0-1000:末字节1000超出有效区间。Range: bytes=1000-2000:指定范围超出有效区间。Range: bytes=1000-:首字节超出有效区间。Range: bytes=-2000:指定范围超出有效区间。
兼容行为
使用HTTP Range时,增加请求头x-oss-range-behavior:standard,可以改变指定范围不在有效区间时OSS的行为。行为改变的示例如下:
此处假设Object资源大小为1000字节,Range有效区间为0-999。如通过HTTP Range请求获取大文件的部分内容时,因选取了无效的范围,导致OSS返回InvalidRange错误码,详细错误信息如下:
The requested range cannot be satisfiedRange: bytes=500-2000:末字节超出有效区间,返回500-999字节范围内容。Range: bytes=1000-2000:首字节超出有效区间,返回错误416 (InvalidRange)。Range: bytes=1000-:首字节超出有效区间,返回错误416 (InvalidRange)。Range: bytes=-2000:指定范围超出有效区间,返回0-999字节,即完整的文件内容。
示例
针对上述内容,本文提供如下HTTP Range请求示例。此处假设Object资源大小为1000字节,Range有效区间为0-999。
正常请求示例
-
请求Object资源0-499字节范围内的内容。
-
请求Object资源第500字节到文件结尾的内容。
-
请求Object资源最后500字节的内容。
超出范围的请求示例
-
末字节1000超出有效区间,导致Range不生效,响应返回值为
200,并传送整个Object内容。 -
指定范围超出有效区间,导致Range不生效,响应返回值为
200,并传送整个Object内容。
兼容行为请求示例
-
增加
x-oss-range-behavior:standard请求头,末字节超出有效区间,返回500-999字节范围的内容。 -
增加
x-oss-range-behavior:standard请求头,首字节超出有效区间,返回416错误。 -
增加
x-oss-range-behavior:standard请求头,指定范围超出有效区间,返回0-999字节,即完整的文件内容。