Sorumluluk Reddi: Bu konu, üçüncü taraf ürünlerle ilgili bilgiler içerebilir. Bilgiler yalnızca referans amaçlıdır. Alibaba Cloud, üçüncü taraf ürünlerin performansı ve güvenilirliği ile bu ürünlerdeki işlemlerin potansiyel etkileri konusunda herhangi bir garanti vermez.
Genel Bakış
Bu konu, HTTP Range isteklerini bölümleyerek OSS kaynaklarının nasıl elde edileceğini açıklar.
Mesaj
OSS üzerinden büyük bir nesne (100 MB'tan büyük) yüklerken veya indirirken, aktarım sırasında ağ ortamından etkilenilirse aktarım başarısız olur. Yükleme işlemi sırasında çok parçalı yükleme yapmak için MultipartUpload işlemini çağırabilirsiniz. Bir kaynağı indirirken büyük bir dosyanın belirli bir kısmını almak için HTTP Range isteği kullanabilirsiniz. Örnek:
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]
Not :[$ByteRange], istenen kaynak aralığını belirtir. Birim: bayt. Örnek:
Range: bytes=0-499 ilk 500 baytı belirtir.
Range: bytes=500-999 ikinci 500 baytı belirtir.
Range: bytes=-500 son 500 baytı belirtir.
Range: bytes=500- 500. bayttan nesnenin sonuna kadar olan verileri belirtir.
Range: bytes=0- ilk bayttan son bayta kadar olan tüm dosya içeriğini ifade eder.
Bir GetObject isteğinde yalnızca tek bir aralık belirtebilirsiniz. Birden fazla aralık belirtirseniz OSS yalnızca ilk aralıktaki verileri döndürür. Örneğin, Range:bytes=0-499.500-999 belirtildiğinde OSS yalnızca 0-499 bayt aralığındaki verileri döndürür.
[$ByteRange] geçerli aralığı 0 ile content-length - 1 arasındadır.
HTTP Range isteği geçerliyse yanıt 206 döndürür ve yanıt başlığında Content-Range içerir. HTTP Range isteği geçersizse veya belirtilen aralık geçerli aralık dışında kalıyorsa aralık dikkate alınmaz. Yanıt 200 değeri döndürür ve nesnenin tamamı iletilir. Aşağıdaki örnekte geçersiz HTTP Range isteği ve hata açıklaması gösterilmektedir.
Not: Bir nesnenin kaynak boyutunun 1000 bayt ve aralık sınırlarının 0-999 olduğunu varsayalım. Belirtilen Range değerinin aralık dışına çıkmasını önlemek için Range okunmadan önce nesne boyutunu almak amacıyla bir HeadObject isteği yapabilirsiniz.
Range: byte=0-499: Format geçersizdir. byte değeri bytes olmalıdır.
Range: bytes=0-1000: Son baytın 1000 değeri geçerli aralığı aşmaktadır.
Range: bytes=1000-2000: Belirtilen aralık geçerli aralığı aşmaktadır.
Range: bytes=1000-: İlk bayt geçerli aralığı aşmaktadır.
Range: bytes=-2000: Belirtilen aralık geçerli aralığı aşmaktadır.
Range parametresinin geçerliliğini test etmek için aşağıdaki komutu çalıştırın:
curl -r 0-100 http://xxxx.oss-cn-hangzhou.aliyuncs.com/xx.zip -o /tmp/xx1.zip -v
Uyumlu davranış
HTTP Range kullanılırken, belirtilen aralık geçerli aralık dışında kaldığında OSS'nin davranışını değiştirmek için x-oss-range-behavior:standard istek başlığı eklenir. Davranış değişikliklerine ilişkin örnekler aşağıda verilmiştir:
Not: Nesnenin kaynak boyutunun 1000 bayt ve aralık sınırlarının 0-999 olduğunu varsayalım. Örneğin, büyük bir dosyanın belirli bir kısmını almak için HTTP Range isteği kullandığınızda geçersiz bir aralık seçildiğinden OSS InvalidRange hata kodu döndürür. Daha fazla bilgi için bkz. OSS 416 hatası döndürüyor . Detaylı hata bilgileri aşağıdaki gibidir:
İstenen aralık karşılanamıyor
Range: bytes=500-2000: Son bayt geçerli aralığı aşarsa 500-999 bayt döndürülür.
Range: bytes=1000-2000: İlk bayt geçerli aralığı aşarsa 416 (InvalidRange) hatası döndürülür.
Range: bytes=1000-: İlk bayt geçerli aralığı aşarsa 416 (InvalidRange) hatası döndürülür.
Range: bytes=-2000: Belirtilen aralık geçerli aralığı aşarsa 0-999 bayt, yani dosyanın tamamı döndürülür.
Örnekler
Bu konuda aşağıdaki örnek HTTP Range isteği sağlanmıştır.
Not: Nesnenin kaynak boyutunun 1000 bayt ve aralık sınırlarının 0-999 olduğunu varsayalım.
Normal istekler
-
İstenen Object kaynağının 0-499 bayt aralığındaki içeriği.
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] -
İstenen Object kaynağının 500. baytından dosya sonuna kadar olan içeriği.
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] -
İstenen Object kaynağının son 500 baytının içeriği.
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]
Aralık dışı istek örneği
-
Son baytın 1000 değeri geçerli aralığı aşarsa Range dikkate alınmaz. Yanıt 200 değeri döndürür ve nesnenin tamamını iletir.
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] -
Belirtilen aralık geçerli aralığı aşarsa Range dikkate alınmaz. Yanıt 200 değeri döndürür ve nesnenin tamamını iletir.
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]
Uyumlu davranış istek örneği
-
x-oss-range-behavior:standard istek başlığını ekleyin. Son bayt geçerli aralığı aştığında 500-999 bayt aralığındaki içerik döndürülür.
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 istek başlığını ekleyin. İlk bayt geçerli aralığı aşarsa 416 hatası döndürülür.
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 istek başlığını ekleyin. Belirtilen aralık geçerli aralığı aşarsa 0-999 bayt, yani dosyanın tamamı döndürülür.
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]
Uygulama kapsamı
OSS