Указание заголовка диапазона для операций службы BLOB-объектов
Несколько операций GET службы BLOB-объектов поддерживают использование стандартного HTTP-заголовка Range
. Многие КЛИЕНТЫ HTTP, в том числе клиентская библиотека .NET, ограничивают размер Range
заголовка 32-разрядным целым числом, поэтому его значение ограничено максимум 4 ГиБ. Так как размер блочных и страничных BLOB-объектов может превышать 4 ГиБ, служба BLOB-объектов принимает настраиваемый заголовок x-ms-range
диапазона для любой операции, принимающей заголовок HTTP Range
.
Некоторые HTTP-клиенты, включая библиотеку Microsoft Silverlight, вообще ограничивают доступ к заголовку Range
. Можно использовать заголовок x-ms-range
, чтобы обойти также и это ограничение.
Если в запросе указан заголовок x-ms-range
, то служба использует диапазон, указанный x-ms-range
; в противном случае используется диапазон, указанный в заголовке Range
.
Примечание
Клиентская библиотека хранилища Azure автоматически задает соответствующий заголовок диапазона для запроса, если установлено свойство Range
объекта PutPageProperties
.
Форматы заголовка диапазона
Служба BLOB-объектов принимает двухбайтовые диапазоны для заголовков Range
и x-ms-range
. Байтовый диапазон должен соответствовать одному из следующих форматов:
bytes=startByte-
для запросов из версии 2011-08-18 или более новойbytes=startByte-endByte
для запросов из всех версий (от 2009-04-14 до самой новой)
Формат 1: bytes=startByte-
Первый формат, bytes=startByte-
, доступен только для запросов из версии 2011-08-18 или более новой или из службы эмулятора хранилища пакета SDK версии 1.6 или более новой. Этот диапазон вернет байты, от смещения startByte
и до конца BLOB-объекта. Например, чтобы указать диапазон, включающий все байты после первых 256 байт BLOB-объекта, можно передать один из следующих заголовков:
Range: bytes=255-
x-ms-range: bytes=255-
Заголовок Content-Length
в ответе равен числу байтов от смещения и до конца BLOB-объекта. Если использовать приведенный выше пример диапазона для большого двоичного объекта длиной 1024 байта, Content-Length
это будет 756.
Если задано правильное смещение, не превышающее общую длину BLOB-объекта, запрос возвращает код состояния HTTP 206 (частичное содержимое). Если смещение недопустимо и превышает общую длину BLOB-объекта, запрос возвращает код состояния HTTP 416 (запрошенный диапазон невыполним).
Формат 2: bytes=startByte-endByte
Второй формат, bytes=startByte-endByte
, доступен для запросов из всех версий (от 2009-04-14 до самой новой) и для всех версий службы эмулятора хранилища. Этот диапазон возвращает байты от смещения startByte
до endByte
. Например, чтобы указать диапазон, включающий первые 512 байт BLOB-объекта, можно передать один из следующих заголовков:
Range: bytes=0-511
x-ms-range: bytes=0-511
Заголовок Content-Length
в ответе равен числу байтов между каждым смещением. Если использовать диапазон из примера выше для BLOB-объекта размером 1024 байта, то Content-Length
будет равно 512.
Если задано правильное смещение, не превышающее общую длину BLOB-объекта, запрос возвращает код состояния HTTP 206 (частичное содержимое). Если смещение недопустимо и превышает общую длину BLOB-объекта, запрос возвращает код состояния HTTP 416 (запрошенный диапазон невыполним).
См. также:
Основные понятия службы BLOB-объектов
Управление версиями для служб хранилища Azure