Unduh sebagian konten dengan menentukan Range
Apa itu unduhan HTTP Range
Saat mengunduh file berukuran besar (di atas 100 MB) dari OSS, transfer dapat gagal akibat kondisi jaringan. Dalam kasus ini, gunakan HTTP Range request untuk mengambil sebagian konten dari file besar tersebut, seperti ditunjukkan pada contoh berikut.[$ByteRange] menunjukkan rentang resource yang diminta, dalam satuan byte. Contohnya ditunjukkan di bawah ini.
Range: bytes=0-499menunjukkan konten dari byte 0 hingga byte 499.Range: bytes=500-999menunjukkan konten dari byte 500 hingga byte 999.Range: bytes=-500menunjukkan 500 byte terakhir.Range: bytes=500-menunjukkan konten dari byte 500 hingga akhir file.Range: bytes=0-menunjukkan konten dari byte pertama hingga byte terakhir, yaitu seluruh file.- OSS tidak mendukung beberapa parameter Range, artinya Anda tidak dapat menentukan beberapa rentang sekaligus. Jika beberapa rentang ditentukan, OSS hanya mengembalikan data dari Range pertama. Sebagai contoh, untuk
Range:bytes=0-499,500-999, OSS hanya mengembalikan konten dari byte 0 hingga byte 499. - Interval valid dari [$ByteRange] adalah dari 0 hingga
content-length - 1.
206 dan menyertakan Content-Range pada Header respons. Jika HTTP Range request tidak valid, atau rentang yang ditentukan berada di luar interval valid, Range tidak berlaku, respons mengembalikan 200, dan seluruh konten Object ditransfer. Berikut adalah contoh HTTP Range request yang tidak valid beserta deskripsi error yang sesuai.
Asumsikan ukuran resource Object adalah 1000 byte, dan interval Range valid adalah dari 0 hingga 999.
Range: byte=0-499: Error format.byteseharusnyabytes.Range: bytes=0-1000: Byte terakhir 1000 melebihi interval valid.Range: bytes=1000-2000: Rentang yang ditentukan melebihi interval valid.Range: bytes=1000-: Byte pertama melebihi interval valid.Range: bytes=-2000: Rentang yang ditentukan melebihi interval valid.
Perilaku kompatibel
Saat menggunakan HTTP Range, tambahkan Header permintaanx-oss-range-behavior:standard untuk mengubah perilaku OSS ketika rentang yang ditentukan berada di luar interval valid. Contoh berikut menggambarkan perilaku yang berubah:
Asumsikan ukuran resource Object adalah 1000 byte, dan interval Range valid adalah dari 0 hingga 999. Saat mengambil sebagian konten dari file besar melalui HTTP Range request, jika rentang yang dipilih tidak valid, OSS mengembalikan Kode error InvalidRange. Pesan error lengkapnya adalah sebagai berikut:
The requested range cannot be satisfiedRange: bytes=500-2000: Byte terakhir melebihi interval valid. Mengembalikan konten dari byte 500 hingga byte 999.Range: bytes=1000-2000: Byte pertama melebihi interval valid. Mengembalikan error416 (InvalidRange).Range: bytes=1000-: Byte pertama melebihi interval valid. Mengembalikan error416 (InvalidRange).Range: bytes=-2000: Rentang yang ditentukan melebihi interval valid. Mengembalikan byte 0 hingga 999, yaitu seluruh file.
Contoh
Berdasarkan konten di atas, topik ini menyediakan contoh HTTP Range request berikut.Asumsikan ukuran resource Object adalah 1000 byte, dan interval Range valid adalah dari 0 hingga 999.
Contoh request normal
-
Minta konten dari byte 0 hingga byte 499 dari resource Object.
-
Minta konten dari byte 500 hingga akhir resource Object.
-
Minta 500 byte terakhir dari resource Object.
Contoh request di luar rentang
-
Byte terakhir 1000 melebihi interval valid, sehingga Range tidak berlaku. Respons mengembalikan
200dan mentransfer seluruh konten Object. -
Rentang yang ditentukan melebihi interval valid, sehingga Range tidak berlaku. Respons mengembalikan
200dan mentransfer seluruh konten Object.
Contoh request perilaku kompatibel
-
Tambahkan Header permintaan
x-oss-range-behavior:standard. Byte terakhir melebihi interval valid, sehingga konten dari byte 500 hingga byte 999 dikembalikan. -
Tambahkan Header permintaan
x-oss-range-behavior:standard. Byte pertama melebihi interval valid, sehingga error416dikembalikan. -
Tambahkan Header permintaan
x-oss-range-behavior:standard. Rentang yang ditentukan melebihi interval valid, sehingga byte 0 hingga 999 dikembalikan, yaitu seluruh file.