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

Object Storage Service:HTTP Range リクエストを分割して OSS リソースを取得する方法

最終更新日:Oct 10, 2026
説明

免責事項: このトピックには、サードパーティ製品に関する情報が含まれている場合があります。 この情報は参照用です。 Alibaba Cloud は、サードパーティ製品のパフォーマンスと信頼性、およびこれらの製品の操作によって生じる潜在的な影響について、いかなる形の保証も行いません。

概要

このトピックでは、HTTP Range リクエストを分割して OSS リソースを取得する方法について説明します。

メッセージ

Object Storage Service (OSS) からサイズの大きいオブジェクト (100 MB 超) をアップロードまたはダウンロードする際、転送がネットワーク環境の影響を受けると、転送が失敗することがあります。 アップロードでは、MultipartUpload 操作 を呼び出してマルチパートアップロードを実行できます。 リソースをダウンロードする際は、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 は、先頭 500 バイトを指定します。
  • Range: bytes=500-999 は、次の 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 リクエストが無効であるか、指定された範囲が有効範囲外の場合、Range 指定は無視されます。 応答としてステータスコード 200 が返され、オブジェクト全体が転送されます。 無効な HTTP Range リクエストの例と、その説明を以下に示します。

説明

注:オブジェクトのサイズが 1000 バイト (有効範囲 0~999) であると仮定します。 指定した Range が範囲外になるのを防ぐため、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 の動作を変更できます。 動作の変更例は次のとおりです。

説明

注:オブジェクトのサイズが 1000 バイト (有効範囲 0~999) であると仮定します。 たとえば、HTTP Range リクエストでサイズの大きいファイルの一部を取得する際に無効な範囲を指定すると、OSS は InvalidRange エラーコードを返します。 このエラーの解決方法については、「OSS が 416 エラーを返す」をご参照ください。 エラーの詳細は次のとおりです。

The requested range cannot be satisfied

  • 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
    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 バイトのオブジェクトデータ]
  • オブジェクトリソースの 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 バイトのオブジェクトデータ]
  • オブジェクトリソースの末尾 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 バイトのオブジェクトデータ]

範囲外リクエストの例

  • 末尾バイトの 1000 が有効範囲外のため、Range 指定は無視されます。 応答としてステータスコード 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 バイトのオブジェクトデータ]
  • 指定された範囲が有効範囲外のため、Range 指定は無視されます。 応答としてステータスコード 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 バイトのオブジェクトデータ]

互換性のある動作のリクエスト例

  • x-oss-range-behavior:standard リクエストヘッダーを追加すると、末尾バイトが有効範囲を超えている場合でも、有効な部分である 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 バイトのオブジェクトデータ]
  • x-oss-range-behavior:standard リクエストヘッダーを追加すると、先頭バイトが有効範囲を超えている場合に 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 リクエストヘッダーを追加すると、指定された範囲が有効範囲を超えている場合でも、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 バイトのオブジェクトデータ]

適用範囲

  • OSS