Dokumen ini mungkin berisi informasi mengenai produk pihak ketiga. Informasi tersebut hanya bersifat referensi. Alibaba Cloud tidak memberikan pernyataan atau jaminan apa pun, baik tersurat maupun tersirat, mengenai kinerja, keandalan, atau dampak potensial dari penggunaan produk pihak ketiga.
Ikhtisar
Topik ini menjelaskan cara menggunakan permintaan HTTP Range untuk mengambil resource Object Storage Service (OSS) dalam segmen.
Detail
Saat mengunggah atau mengunduh file besar—misalnya yang berukuran lebih dari 100 MB—di OSS, transfer tersebut berisiko gagal karena masalah jaringan. Untuk unggahan, Anda dapat menggunakan operasi UploadPart guna melakukan unggah multi-bagian. Untuk unduhan, Anda dapat menggunakan permintaan HTTP Range untuk mengambil bagian tertentu dari file besar. Contoh berikut menunjukkan contoh permintaan tersebut.
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] menentukan rentang byte dari resource yang diminta. Berikut adalah beberapa contoh penentuan rentang tersebut:
Range: bytes=0-499: Mengembalikan konten dari byte 0 hingga byte 499.Range: bytes=500-999: Mengembalikan konten dari byte 500 hingga byte 999.Range: bytes=-500: Mengembalikan 500 byte terakhir dari konten.Range: bytes=500-: Mengembalikan konten dari byte 500 hingga akhir file.Range: bytes=0-: Mengembalikan seluruh file, yaitu dari byte pertama hingga byte terakhir.Dengan menambahkan header
x-oss-multi-range-behavior: multi-range, Anda dapat menentukan beberapa rentang sekaligus. Contohnya:Range: bytes=0-1,3-4,5-6,7-8. Maksimal 50 rentang dapat ditentukan.Rentang yang valid untuk [$ByteRange] adalah dari 0 hingga
content-length - 1.
Jika permintaan HTTP Range valid, OSS mengembalikan kode status 206 dan menyertakan header Content-Range dalam respons. Jika permintaan HTTP Range tidak valid atau rentang yang ditentukan berada di luar interval yang valid, OSS akan mengabaikan permintaan Range tersebut dan mengembalikan kode status 200 beserta seluruh objek. Contoh berikut menunjukkan permintaan HTTP Range yang tidak valid beserta penjelasan kesalahannya.
Asumsikan ukuran objek adalah 1.000 byte. Rentang yang valid adalah 0 hingga 999. Untuk menghindari penentuan rentang yang melebihi ukuran objek, kirim permintaan HeadObject terlebih dahulu guna memperoleh ukuran objek sebelum mengirim permintaan Range.
Range: byte=0-499: Format tidak valid. `byte` harus ditulis sebagai `bytes`.Range: bytes=0-1000: Byte akhir 1000 berada di luar rentang yang valid.Range: bytes=1000-2000: Rentang yang ditentukan berada di luar rentang yang valid.Range: bytes=1000-: Byte awal berada di luar rentang yang valid.Range: bytes=-2000: Rentang yang ditentukan berada di luar rentang yang valid.
Gunakan perintah berikut untuk menguji validitas parameter Range.
curl -r 0-100 http://xxxx.oss-cn-hangzhou.aliyuncs.com/xx.zip -o /tmp/xx1.zip -vPerilaku kompatibel
Saat menggunakan permintaan HTTP Range, Anda dapat menambahkan header permintaan x-oss-range-behavior:standard untuk mengubah perilaku OSS terhadap permintaan dengan rentang yang berada di luar interval yang valid. Perubahan perilaku tersebut dijelaskan dalam contoh berikut:
Asumsikan ukuran objek adalah 1.000 byte. Rentang yang valid adalah 0 hingga 999. Jika OSS mengembalikan kode kesalahan InvalidRange karena rentang yang tidak valid dalam permintaan HTTP Range, lihat OSS mengembalikan error 416 untuk menyelesaikan masalah tersebut. Pesan kesalahan berikut akan dikembalikan:
The requested range cannot be satisfied
Range: bytes=500-2000: Byte akhir berada di luar rentang yang valid. OSS mengembalikan konten dari byte 500 hingga byte 999.Range: bytes=1000-2000: Byte awal berada di luar rentang yang valid. OSS mengembalikan kesalahan416 (InvalidRange).Range: bytes=1000-: Byte awal berada di luar rentang yang valid. OSS mengembalikan kesalahan416 (InvalidRange).Range: bytes=-2000: Rentang yang ditentukan berada di luar rentang yang valid. OSS mengembalikan seluruh file, yaitu dari byte 0 hingga byte 999.
Contoh
Contoh berikut menunjukkan berbagai jenis permintaan HTTP Range.
Asumsikan ukuran objek adalah 1.000 byte. Rentang yang valid adalah 0 hingga 999.
Contoh permintaan normal
Meminta konten objek dari byte 0 hingga byte 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]Meminta konten objek dari byte 500 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]Meminta 500 byte terakhir dari objek.
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 rentang
Byte akhir 1000 berada di luar rentang yang valid. Permintaan Range diabaikan. OSS mengembalikan kode status
200dan mentransfer seluruh 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]Rentang yang ditentukan berada di luar rentang yang valid. Permintaan Range diabaikan. OSS mengembalikan kode status
200dan mentransfer seluruh objek.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]
Contoh permintaan dengan perilaku kompatibel
Tambahkan header permintaan
x-oss-range-behavior:standard. Byte akhir berada di luar rentang yang valid. OSS mengembalikan konten dari byte 500 hingga byte 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. Byte awal berada di luar rentang yang valid. OSS mengembalikan kesalahan416.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. Rentang yang ditentukan berada di luar rentang yang valid. OSS mengembalikan seluruh file, yaitu dari byte 0 hingga byte 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]
Berlaku untuk
Object Storage Service (OSS)