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: [$ByteRange] menunjukkan rentang sumber daya yang diminta. Unit: byte. Contoh:
Range: bytes=0-499menentukan 500 byte pertama.Range: bytes=500-999menentukan 500 byte kedua.Range: bytes=-500menentukan 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: 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: 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: Kesalahan416 (InvalidRange)dikembalikan jika byte pertama melebihi interval yang valid.Range: bytes=1000-: Kesalahan416 (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: 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
200dan 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
200dan 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, kesalahan416dikembalikan.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