Поделиться через


Указание заголовка диапазона для операций службы 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