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

Object Storage Service:HTTP Range リクエストを使用した OSS リソースのセグメント取得

最終更新日:Mar 05, 2026

説明

このドキュメントには、サードパーティ製品に関する情報が含まれている場合があります。この情報は参照用です。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)