このドキュメントには、サードパーティ製品に関する情報が含まれている場合があります。この情報は参照用です。Alibaba Cloud は、サードパーティ製品の使用によるパフォーマンス、信頼性、または潜在的な影響について、明示的または黙示的を問わず、いかなる表明または保証も行いません。
概要
このトピックでは、HTTP Range リクエストを使用して Object Storage Service (OSS) リソースをセグメントで取得する方法について説明します。
詳細
OSS で 100 MB を超えるような大容量ファイルをアップロードまたはダウンロードする際、ネットワークの問題により転送が失敗する場合があります。アップロードの場合、UploadPart オペレーションを呼び出してマルチパートアップロードを実行できます。ダウンロードの場合、HTTP Range リクエストを使用して大容量ファイルの一部を取得できます。以下にリクエスト例を示します。
Get /ObjectName HTTP/1.1
Host:xxxx.oss-cn-hangzhou.aliyuncs.com
Date:Tue, 17 Nov 2015 17:27:45 GMT
Authorization:SignatureValue
Range:bytes=[$ByteRange][$ByteRange] は、リクエストするリソースのバイト範囲を指定します。範囲の指定方法は以下のとおりです。
Range: bytes=0-499: 0 バイト目から 499 バイト目までのコンテンツを返します。Range: bytes=500-999: 500 バイト目から 999 バイト目までのコンテンツを返します。Range: bytes=-500: コンテンツの最後の 500 バイトを返します。Range: bytes=500-: 500 バイト目からファイルの最後までコンテンツを返します。Range: bytes=0-: 最初のバイトから最後のバイトまで、つまりファイル全体のコンテンツを返します。x-oss-multi-range-behavior: multi-rangeを使用すると、複数の範囲を指定できます。たとえば、Range: bytes=0-1,3-4,5-6,7-8のように指定します。最大 50 の範囲を指定できます。[$ByteRange] の有効な範囲は、0 から
content-length - 1までです。
HTTP Range リクエストが有効な場合、OSS は 206 ステータスコードを返し、レスポンスに Content-Range ヘッダーを含めます。HTTP Range リクエストが無効な場合、または指定された範囲が有効な間隔外にある場合、OSS は Range リクエストを無視し、オブジェクト全体とともに 200 ステータスコードを返します。以下に、無効な HTTP Range リクエストの例とエラーの説明を示します。
オブジェクトのサイズが 1,000 バイトであると仮定します。有効な範囲は 0 から 999 です。指定された範囲がオブジェクトサイズを超えないようにするため、Range リクエストを送信する前に HeadObject リクエストを送信してオブジェクトサイズを取得してください。
Range: byte=0-499: フォーマットが無効です。`byte` は `bytes` である必要があります。Range: bytes=0-1000: 終了バイト 1000 は有効な範囲外です。Range: bytes=1000-2000: 指定された範囲は有効な範囲外です。Range: bytes=1000-: 開始バイトは有効な範囲外です。Range: bytes=-2000: 指定された範囲は有効な範囲外です。
Range パラメーターの有効性をテストするには、次のコマンドを使用します。
curl -r 0-100 http://xxxx.oss-cn-hangzhou.aliyuncs.com/xx.zip -o /tmp/xx1.zip -v互換性のある動作
HTTP Range リクエストを使用する場合、x-oss-range-behavior:standard リクエストヘッダーを追加することで、指定された範囲が有効な間隔外にあるリクエストに対する OSS の動作を変更できます。以下に、動作がどのように変化するかを示します。
オブジェクトのサイズが 1,000 バイトであると仮定します。有効な範囲は 0 から 999 です。HTTP Range リクエストで無効な範囲を指定したために OSS が InvalidRange エラーコードを返す場合、この問題を解決するには「OSS が 416 エラーを返します」をご参照ください。次のエラーメッセージが返されます。
The requested range cannot be satisfied
Range: bytes=500-2000: 終了バイトは有効な範囲外です。OSS は 500 バイト目から 999 バイト目までのコンテンツを返します。Range: bytes=1000-2000: 開始バイトは有効な範囲外です。OSS は416 (InvalidRange)エラーを返します。Range: bytes=1000-: 開始バイトは有効な範囲外です。OSS は416 (InvalidRange)エラーを返します。Range: bytes=-2000: 指定された範囲は有効な範囲外です。OSS は 0 バイト目から 999 バイト目までのコンテンツ、つまりファイル全体を返します。
例
以下の例では、さまざまなタイプの HTTP Range リクエストを示します。
オブジェクトのサイズが 1,000 バイトであると仮定します。有効な範囲は 0 から 999 です。
通常のリクエスト例
オブジェクトの 0 バイト目から 499 バイト目までのコンテンツをリクエストします。
GET /ObjectName Range: bytes=0-499 Host: bucket.oss-cn-hangzhou.aliyuncs.com Date: Fri, 18 Oct 2019 02:51:30 GMT Authorization: Signature 206 (Partial Content) content-length: 500 content-range: bytes 0-499/1000 connection: keep-alive etag: "CACF99600561A31D494569C979E6FB81" x-oss-request-id: 5DA928B227D52731327DE078 date: Fri, 18 Oct 2019 02:51:30 GMT [500 bytes of object data]オブジェクトの 500 バイト目からファイルの最後までコンテンツをリクエストします。
GET /ObjectName Range: bytes=500- Host: bucket.oss-cn-hangzhou.aliyuncs.com Date: Fri, 18 Oct 2019 03:24:39 GMT Authorization: Signature 206 (Partial Content) content-length: 500 content-range: bytes 500-999/1000 etag: "CACF99600561A31D494569C979E6FB81" x-oss-request-id: 5DA9307750EBE33332E3720A date: Fri, 18 Oct 2019 03:24:39 GMT [500 bytes of object data]オブジェクトの最後の 500 バイトをリクエストします。
GET /ObjectName Range: bytes=-500 Host: bucket.oss-cn-hangzhou.aliyuncs.com Date: Fri, 18 Oct 2019 03:23:22 GMT Authorization: Signature 206 (Partial Content) content-length: 500 content-range: bytes 500-999/1000 etag: "CACF99600561A31D494569C979E6FB81" x-oss-request-id: 5DA9302A6646AC37397F7039 date: Fri, 18 Oct 2019 03:23:22 GMT [500 bytes of object data]
範囲外のリクエスト例
終了バイト 1000 は有効な範囲外です。Range リクエストは無視されます。OSS は
200ステータスコードを返し、オブジェクト全体を転送します。GET /ObjectName Range: bytes=0-1000 Host: bucket.oss-cn-hangzhou.aliyuncs.com Date: Fri, 18 Oct 2019 03:00:02 GMT Authorization: Signature 200 (OK) content-length: 1000 etag: "CACF99600561A31D494569C979E6FB81" x-oss-request-id: 5DA92AB204321E36347F3E7D date: Fri, 18 Oct 2019 03:00:02 GMT [1000 bytes of object data]指定された範囲は有効な範囲外です。Range リクエストは無視されます。OSS は
200ステータスコードを返し、オブジェクト全体を転送します。GET /ObjectName Range: bytes=1000-2000 Host: bucket.oss-cn-hangzhou.aliyuncs.com Date: Fri, 18 Oct 2019 02:56:24 GMT Authorization: Signature 200 (OK) content-length: 1000 etag: "CACF99600561A31D494569C979E6FB81" x-oss-request-id: 5DA929D9CCCC823835CBE134 date: Fri, 18 Oct 2019 02:56:25 GMT [1000 bytes of object data]
互換性のある動作のリクエスト例
x-oss-range-behavior:standardリクエストヘッダーを追加します。終了バイトは有効な範囲外です。OSS は 500 バイト目から 999 バイト目までのコンテンツを返します。GET /ObjectName x-oss-range-behavior: standard Range: bytes=500-2000 Host: bucket.oss-cn-hangzhou.aliyuncs.com Date: Fri, 18 Oct 2019 07:02:23 GMT Authorization: Signature 206 (Partial Content) content-length: 500 content-range: bytes 500-999/1000 etag: "CACF99600561A31D494569C979E6FB81" x-oss-request-id: 5DA9637FB3B1C73234CC59EB date: Fri, 18 Oct 2019 07:02:23 GMT [500 bytes of object data]x-oss-range-behavior:standardリクエストヘッダーを追加します。開始バイトは有効な範囲外です。OSS は416エラーを返します。GET /ObjectName x-oss-range-behavior: standard Range: bytes=1000-2000 Host: bucket.oss-cn-hangzhou.aliyuncs.com Date: Fri, 18 Oct 2019 07:04:23 GMT Authorization: Signature 416 (Requested Range Not Satisfiable) content-length: 345 x-oss-request-id: 5DA963F7CEBFAA3931BF91F5 date: Fri, 18 Oct 2019 07:04:23 GMT content-type: application/xml <?xml version="1.0" encoding="UTF-8"?> <Error> <Code>InvalidRange</Code> <Message>The requested range cannot be satisfied</Message> <RequestId>5DA963F7CEBFAA3931BF91F5</RequestId> <HostId>bucket.oss-cn-hangzhou.aliyuncs.com</HostId> <ActualObjectSize>1000</ActualObjectSize> <RangeRequested>bytes=1000-2000</RangeRequested> </Error>x-oss-range-behavior:standardリクエストヘッダーを追加します。指定された範囲は有効な範囲外です。OSS は 0 バイト目から 999 バイト目までのコンテンツ、つまりファイル全体を返します。GET /ObjectName x-oss-range-behavior: standard Range: bytes=-2000 Host: bucket.oss-cn-hangzhou.aliyuncs.com Date: Fri, 18 Oct 2019 07:06:39 GMT Authorization: Signature 206 (Partial Content) content-length: 1000 content-range: bytes 0-999/1000 etag: "CACF99600561A31D494569C979E6FB81" x-oss-request-id: 5DA9647FC4334F3534AF9A83 date: Fri, 18 Oct 2019 07:06:39 GMT [1000 bytes of object data]
適用対象
Object Storage Service (OSS)