全部产品
Search
文档中心

Object Storage Service:Cara Memperoleh Sumber Daya OSS dengan Membagi Permintaan HTTP Range

更新时间:Jun 26, 2025

Catatan

Penafian: Topik ini mungkin berisi informasi tentang produk pihak ketiga. Informasi tersebut hanya untuk referensi. Alibaba Cloud tidak memberikan jaminan dalam bentuk apa pun terkait kinerja dan keandalan produk pihak ketiga, serta dampak potensial dari operasi pada produk-produk tersebut.

Ikhtisar

Topik ini menjelaskan cara memperoleh sumber daya OSS menggunakan permintaan HTTP Range.

Pesan

Saat mengunggah atau mengunduh objek besar (lebih besar dari 100 MB) dari OSS, transfer dapat gagal jika objek tersebut terpengaruh oleh lingkungan jaringan. Selama proses unggah, Anda dapat menggunakan operasi MultipartUpload untuk melakukan unggah multipart. Saat mengunduh sumber daya, Anda dapat menggunakan permintaan HTTP Range untuk mendapatkan sebagian konten dari file besar. Contoh:

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]



Catatan

Catatan: [$ByteRange] menunjukkan rentang sumber daya yang diminta. Unit: byte. Contoh:

  • Range: bytes=0-499 menentukan 500 byte pertama.
  • Range: bytes=500-999 menentukan 500 byte kedua.
  • Range: bytes=-500 menentukan 500 byte terakhir.
  • Range: bytes=500- menentukan data dari byte ke-500 hingga akhir objek.
  • Range: bytes=0- menunjukkan byte pertama hingga byte terakhir, yaitu konten file lengkap.
  • Hanya satu rentang yang dapat ditentukan dalam permintaan GetObject. Jika beberapa rentang ditentukan, OSS hanya akan mengembalikan data di rentang pertama. Sebagai contoh, Range:bytes=0-499,500-999, OSS hanya akan mengembalikan data dalam rentang 0 hingga 499 byte.
  • [$ByteRange] Interval yang valid berada dalam rentang 0 hingga content-length - 1.

Jika permintaan HTTP Range valid, respons akan mengembalikan 206 dan mencakup Content-Range dalam header respons. Jika permintaan HTTP Range tidak valid atau rentang yang ditentukan tidak berada dalam rentang yang valid, respons akan mengembalikan nilai 200 dan mentransmisikan seluruh konten objek. Contoh berikut menunjukkan permintaan HTTP Range yang tidak valid beserta deskripsi kesalahannya.

Catatan

Catatan: Anggap ukuran sumber daya sebuah objek adalah 1000 byte dan rentangnya adalah 0 hingga 999. Untuk menghindari rentang yang melebihi batas, Anda dapat membuat permintaan HeadObject untuk mendapatkan ukuran objek sebelum membaca Range.

  • Range: byte=0-499: Format tidak valid. Nilai byte harus bytes.
  • Range: bytes=0-1000: Byte ke-1000 melebihi interval yang valid.
  • Range: bytes=1000-2000: Rentang yang ditentukan melebihi rentang yang valid.
  • Range: bytes=1000-: Byte pertama melebihi interval yang valid.
  • Range: bytes=-2000: Rentang yang ditentukan melebihi rentang yang valid.

Anda dapat menjalankan perintah berikut untuk menguji validitas parameter Range:

curl -r 0-100 http://xxxx.oss-cn-hangzhou.aliyuncs.com/xx.zip -o /tmp/xx1.zip -v

Perilaku Kompatibel

Saat menggunakan HTTP Range, tambahkan header permintaan x-oss-range-behavior:standard untuk mengubah perilaku OSS saat rentang yang ditentukan tidak valid. Contoh perubahan perilaku adalah sebagai berikut:

Catatan

Catatan: Anggap ukuran sumber daya objek adalah 1000 byte dan rentangnya adalah 0-999. Sebagai contoh, OSS mengembalikan kode kesalahan InvalidRange karena rentang yang tidak valid dipilih saat menggunakan permintaan HTTP Range untuk memperoleh sebagian konten dari file besar. Untuk informasi lebih lanjut, lihat OSS mengembalikan kesalahan 416 untuk menyelesaikan kesalahan tersebut. Informasi kesalahan rinci adalah sebagai berikut:

Rentang yang diminta tidak dapat dipenuhi

  • Range: bytes=500-2000: Jika byte terakhir melebihi rentang yang valid, 500-999 byte dikembalikan.
  • Range: bytes=1000-2000: Kesalahan 416 (InvalidRange) dikembalikan jika byte pertama melebihi interval yang valid.
  • Range: bytes=1000-: Kesalahan 416 (InvalidRange) dikembalikan jika byte pertama melebihi interval yang valid.
  • Range: bytes=-2000: Jika rentang yang ditentukan melebihi rentang yang valid, 0-999 byte dikembalikan, yaitu konten file lengkap.

Contoh

Topik ini menyediakan contoh permintaan HTTP Range berikut:

Catatan

Catatan: Anggap ukuran sumber daya objek adalah 1000 byte dan rentangnya adalah 0-999.

Permintaan Normal

  • Konten dalam rentang byte 0-499 dari sumber daya Object yang diminta.
    GET /ObjectName
    Range: bytes=0-499
    Host: bucket.oss-cn-hangzhou.aliyuncs.com
    Date: Fri, 18 Oct 2019 02:51:30 GMT
    Authorization: Sigature
    
    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]
  • Konten dari byte ke-500 dari sumber daya Object yang diminta hingga akhir file.
    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]
  • Konten dari 500 byte terakhir dari sumber daya Object yang diminta.
    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]

Contoh Permintaan di Luar Cakupan

  • Jika byte ke-1000 melebihi interval yang valid, Range tidak berlaku. Respons mengembalikan nilai 200 dan mentransmisikan seluruh konten objek.
    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]
  • Jika rentang yang ditentukan melebihi rentang yang valid, Range tidak berlaku. Respons mengembalikan nilai 200 dan mentransmisikan seluruh konten objek.
    GET /ObjectName
    Range: bytes=1000-2000
    Host: bucket.oss-cn-hangzhou.aliyuncs.com
    Date: Fri, 18 Oct 2019 02:56:24 GMT
    Authorization: Sigature
    
    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]

Contoh Permintaan Perilaku Kompatibel

  • Tambahkan header permintaan x-oss-range-behavior:standard. Byte terakhir melebihi interval yang valid dan mengembalikan konten dalam rentang byte 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]
  • Tambahkan header permintaan x-oss-range-behavior:standard. Jika byte pertama melebihi interval yang valid, kesalahan 416 dikembalikan.
    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>
  • Tambahkan header permintaan x-oss-range-behavior:standard. Jika rentang yang ditentukan melebihi rentang yang valid, 0-999 byte dikembalikan, yaitu konten file lengkap.
    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]

Ruang lingkup aplikasi

  • OSS