すべてのプロダクト
Search
ドキュメントセンター

:HTTP範囲リクエストをセグメント化してOSSリソースを取得する方法

最終更新日:Feb 21, 2024

説明

免責事項: このトピックには、サードパーティ製品に関する情報が含まれる場合があります。 情報は参照だけのためです。 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