免責事項: このトピックには、サードパーティ製品に関する情報が含まれる場合があります。 情報は参照だけのためです。 Alibaba Cloudは、サードパーティ製品のパフォーマンスと信頼性、およびこれらの製品に対する運用の潜在的な影響について、いかなる形でも保証するものではありません。
概要
このトピックでは、HTTP Rangeリクエストをセグメント化してOSSリソースを取得する方法について説明します。
Message
OSSから大きなオブジェクト (100 MBを超える) をアップロードまたはダウンロードするときに、転送中にオブジェクトがネットワーク環境の影響を受けた場合、転送は失敗します。 アップロードプロセス中に、MultipartUpload操作を呼び出して、マルチパートアップロードを実行できます。 リソースをダウンロードするときに、HTTP Rangeリクエストを使用して、大きなファイルのコンテンツを取得できます。 例:
Get /ObjectName HTTP/1.1
Hos t:xxxx.oss-cn-hangzhou.aliyuncs.com
日付: 11月17日火曜日2015 17:27:45 GMT
権限付与: SignatureValue
Range:bytes=[$ByteRange]
注 :[$ByteRange] は、要求されたリソースの範囲を示します。 単位:バイト 例:
Range: bytes=0-499
は、最初の500バイトを指定します。Range: bytes=500-999
は、2番目の500バイトを指定します。Range: bytes=-500
は、最後の500バイトを指定します。Range: bytes=500-
オブジェクトの500番目のバイトから末尾までのデータを指定します。Range: bytes=0-
は、最初のバイトから最後のバイトを示します。これは、完全なファイルコンテンツです。- GetObjectリクエストで指定できる範囲は1つだけです。 複数の範囲を指定した場合、OSSは最初の範囲のデータのみを返します。 たとえば、
Range:bytes=0-499,500-999
の場合、OSSは0 ~ 499バイトの範囲のデータのみを返します。 - [$ByteRange] 有効な間隔は0から
content-length - 1
の範囲です。
HTTP Rangeリクエストが有効な場合、レスポンスは206
を返し、レスポンスヘッダーにContent-Range
が含まれます。 HTTP Rangeリクエストが無効な場合、または指定された範囲が有効な範囲内にない場合、範囲は有効になりません。 応答は200
の値を返し、オブジェクトコンテンツ全体が送信されます。 次の例は、無効なHTTP Rangeリクエストとエラーの説明を示しています。
注: オブジェクトのリソースサイズが1000バイトで、範囲が0〜999であると仮定します。 指定したRangeが範囲外にならないようにするには、rangeを読み取る前にHeadObjectリクエストを実行してオブジェクトサイズを取得します。
Range: byte=0-499
: フォーマットが無効です。 バイト値はバイトでなければなりません。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を使用すると、指定された範囲が有効な範囲内にない場合にossの動作を変更するために、リクエストヘッダーx-OSS-range-behavior:standard
が追加されます。 動作変更の例は次のとおりです。
注: オブジェクトのリソースサイズが1000バイトで、範囲が0〜999であると仮定します。 たとえば、HTTP rangeリクエストを使用して大きなファイルのコンテンツを取得すると、無効な範囲が選択されるため、OSSはInvalidRangeエラーコードを返します。 詳細については、「OSSが416エラーを返す」をご参照ください。 詳細なエラー情報は次のとおりです。
要求された範囲が満たされません
Range: bytes=500-2000
: 最後のバイトが有効範囲を超えた場合、500-999バイトが返されます。Range: bytes=1000-2000
: 最初のバイトが有効な間隔を超えた場合、エラー416 (InvalidRange)
が返されます。Range: bytes=1000-
: 最初のバイトが有効な間隔を超えた場合、エラー416 (InvalidRange)
が返されます。Range: bytes=-2000
: 指定された範囲が有効な範囲を超えた場合、0〜999バイトが返されます。これは完全なファイルコンテンツです。
例
このトピックでは、次のサンプルHTTP Rangeリクエストを提供します。
注: オブジェクトのリソースサイズが1000バイトで、範囲が0〜999であると仮定します。
通常のリクエスト
- 要求されたオブジェクトリソースの0〜499バイトの範囲の内容。
GET /ObjectName 範囲: バイト=0-499 ホスト: bucket.oss-cn-hangzhou.aliyuncs.com 日付: 10月18日金曜日2019 02:51:30 GMT 権限付与: Sigature 206 (部分コンテンツ) content-length: 500 content-range: バイト0-499/1000 接続: キープアライブ etag: "CACF99600561A31D494569C979E6FB81" x-oss-request-id: 5DA928B227D52731327DE078 日付: 10月18日金曜日2019 02:51:30 GMT [500バイトのオブジェクトデータ]
- 要求されたオブジェクトリソースの500番目のバイトからファイルの終わりまでの内容。
GET /ObjectName 範囲: bytes=500- ホスト: bucket.oss-cn-hangzhou.aliyuncs.com 日付: 10月18日金曜日2019 03:24:39GMT 承認: 署名 206 (部分コンテンツ) content-length: 500 content-range: バイト500-999/1000 etag: "CACF99600561A31D494569C979E6FB81" x-oss-request-id: 5DA9307750EBE33332E3720A 日付: 10月18日金曜日2019 03:24:39GMT [500バイトのオブジェクトデータ]
- 要求されたオブジェクトリソースの最後の500バイトの内容。
GET /ObjectName 範囲: バイト=-500 ホスト: bucket.oss-cn-hangzhou.aliyuncs.com 日付: 10月18日金曜日2019 03:23:22 GMT 承認: 署名 206 (部分コンテンツ) content-length: 500 content-range: バイト500-999/1000 etag: "CACF99600561A31D494569C979E6FB81" x-oss-request-id: 5DA9302A6646AC37397F7039 日付: 10月18日金曜日2019 03:23:22 GMT [500バイトのオブジェクトデータ]
スコープ外リクエストの例
- 最後のバイトの1000が有効な間隔を超えた場合、Rangeは有効になりません。 応答は
200
の値を返し、オブジェクトコンテンツ全体を送信します。GET /ObjectName 範囲: バイト=0-1000 ホスト: bucket.oss-cn-hangzhou.aliyuncs.com 日付: 10月18日金曜日2019 03:00:02GMT 承認: 署名 200 (OK) content-length: 1000 etag: "CACF99600561A31D494569C979E6FB81" x-oss-request-id: 5DA92AB204321E36347F3E7D 日付: 10月18日金曜日2019 03:00:02 GMT [1000バイトのオブジェクトデータ]
- 指定された範囲が有効な範囲を超えた場合、範囲は有効になりません。 応答は
200
の値を返し、オブジェクトコンテンツ全体を送信します。GET /ObjectName 範囲: バイト=1000-2000 ホスト: bucket.oss-cn-hangzhou.aliyuncs.com 日付: 10月18日金曜日2019 02:56:24 GMT 権限付与: Sigature 200 (OK) content-length: 1000 etag: "CACF99600561A31D494569C979E6FB81" x-oss-request-id: 5DA929D9CCCC823835CBE134 日付: 10月18日金曜日2019 02:56:25 GMT [1000バイトのオブジェクトデータ]
互換性のある動作リクエストの例
x-oss-range-behavior:standard
リクエストヘッダーを追加します。 最後のバイトが有効な間隔を超え、500 999バイトの範囲のコンテンツを返します。GET /ObjectName x-oss-range-behavior: 標準 範囲: バイト=500-2000 ホスト: bucket.oss-cn-hangzhou.aliyuncs.com 日付: 10月18日金曜日2019 07:02:23 GMT 承認: 署名 206 (部分コンテンツ) content-length: 500 content-range: バイト500-999/1000 etag: "CACF99600561A31D494569C979E6FB81" x-oss-request-id: 5DA9637FB3B1C73234CC59EB 日付: 10月18日金曜日2019 07:02:23 GMT [500バイトのオブジェクトデータ]
x-oss-range-behavior:standard
リクエストヘッダーを追加します。 最初のバイトが有効な間隔を超えると、416
エラーが返されます。GET /ObjectName x-oss-range-behavior: 標準 範囲: バイト=1000-2000 ホスト: bucket.oss-cn-hangzhou.aliyuncs.com 日付: 10月18日金曜日2019 07:04:23 GMT 承認: 署名 416 (要求された範囲は満足できない) content-length: 345 x-oss-request-id: 5DA963F7CEBFAA3931BF91F5 日付: 10月18日金曜日2019 07:04:23 GMT content-type: application/xml <?xml version="1.0" encoding="UTF-8"?> <エラー> <Code>InvalidRange</Code> <メッセージ> 要求された範囲を満たすことができません </Message> <RequestId>5DA963F7CEBFAA3931BF91F5</RequestId> <HostId>bucket.oss-cn-hangzhou.aliyuncs.com</HostId> <ActualObjectSize>1000</ActualObjectSize> <RangeRequested>bytes=1000-2000</RangeRequested> </エラー>
x-oss-range-behavior:standard
リクエストヘッダーを追加します。 指定された範囲が有効な範囲を超えた場合、0〜999バイト、つまり完全なファイルコンテンツが返されます。GET /ObjectName x-oss-range-behavior: 標準 範囲: バイト=-2000 ホスト: bucket.oss-cn-hangzhou.aliyuncs.com 日付: 10月18日金曜日2019 07:06:39GMT 承認: 署名 206 (部分コンテンツ) content-length: 1000 content-range: バイト0-999/1000 etag: "CACF99600561A31D494569C979E6FB81" x-oss-request-id: 5DA9647FC4334F3534AF9A83 日付: 10月18日金曜日2019 07:06:39GMT [1000バイトのオブジェクトデータ]
適用範囲
- OSS