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


Определение условных заголовков для операций сервиса Blob

Несколько сервисных операций Blob поддерживают использование условных заголовков. Вы можете задать условные заголовки для выполнения операции только при выполнении заданного условия.

Сервис Blob следует спецификации протокола HTTP/1.1 для условных заголовков.

Поддерживаемые условные заголовки

Поддерживаемые условные заголовки описаны в следующей таблице.

Условный заголовок Description
If-Modified-Since Некоторое значение DateTime. Формат даты соответствует RFC 1123. Для получения дополнительной информации см. Представление значений даты-времени в заголовках. Закажите этот заголовок для выполнения операции только если ресурс был изменён с указанного времени.
If-Unmodified-Since Некоторое значение DateTime. Формат даты соответствует RFC 1123. Для получения дополнительной информации см. Представление значений даты-времени в заголовках. Закажите этот заголовок для выполнения операции только если ресурс не был изменён до указанной даты/времени.
If-Match Значение ETag. Укажите этот заголовок для выполнения операции, только если ETag ресурса соответствует указанному значению. Для версий 2011-08-18 и более поздних ETag можно указывать в кавычках.
If-None-Match Значение ETag или подстановочный знак (*). Укажите этот заголовок для выполнения операции только если ETag ресурса не совпадает с указанным значением. Для версий 2011-08-18 и более поздних ETag можно указывать в кавычках.

Закажите джокер-символ (*) для выполнения операции только если ресурса не существует, и проваливайте операцию, если он существует.

Определение условных заголовков для операций чтения сервиса Blob в версии 2013-08-15 или более поздней

Начиная с версии 2013-08-15, операции Get Blob и Get Blob Properties поддерживают несколько условных заголовков. Вы можете указать любую комбинацию поддерживаемых условных заголовков. Сервис Blob оценивает эти условия по следующему выражению:

If-Match && If-Unmodified-Since && (If-None-Match || If-Modified-Since)

Вы также можете предоставить несколько значений с разделёнными по запятым для If-Match и If-None-Match. Если указать несколько значений для If-Match, то сервис Blob выполняет логическую OR операцию со всеми предоставленными значениями перед вычислением всего выражения. Если указать несколько значений для if-None-Match, сервис выполняет логическую AND операцию перед вычислением всего выражения. Указание нескольких значений для If-Modified-Since и If-Unmodified-Since не поддерживается и приводит к коду ошибки 400 (Bad Request).

Эта функция включена для соответствия спецификации HTTP/1.1. Он также подходит для сценариев, когда сеть доставки контента (CDN) или прокси-сервер добавляет дополнительные условные заголовки к запросу в полёте. Следующие примеры иллюстрируют несколько различных комбинаций условных заголовков.

Пример 1.

Рассмотрим запрос Get Blob с If-Match заголовками and If-Modified-Since . Следующая таблица показывает результат, если заголовки оцениваются отдельно, и результат, если они оцениваются в комбинации.

Условные заголовки Результат при индивидуальной оценке Результат, если оценивать в комбинации
If-Match 412 (Предварительное условие не выполнено) 412 (Предварительное условие не выполнено)
If-Modified-Since 200 OK; 412 (Предварительное условие не выполнено)
If-Match 412 (Предварительное условие не выполнено) 412 (Предварительное условие не выполнено)
If-Modified-Since 304 (не изменён) 412 (Предварительное условие не выполнено)
If-Match 200 OK; 200 OK;
If-Modified-Since 200 OK; 200 OK;
If-Match 200 OK; 304 (не изменён)
If-Modified-Since 304 (не изменён) 304 (не изменён)

Пример 2.

Рассмотрим запрос, содержащий If-None-Match заголовки и If-Modified-Since

Условные заголовки Результат при индивидуальной оценке Результат, если оценивать в комбинации
If-None-Match 304 (не изменён) 200 OK;
If-Modified-Since 200 OK; 200 OK;
If-None-Match 200 OK; 200 OK;
If-Modified-Since 200 OK; 200 OK;
If-None-Match 200 OK; 200 OK;
If-Modified-Since 304 (не изменён) 200 OK;
If-None-Match 304 (не изменён) 304 (не изменён)
If-Modified-Since 304 (не изменён) 304 (не изменён)

Пример 3:

Рассмотрим запрос, содержащий If-Modified-Since, If-Matchи If-Unmodified-Since заголовки.

Условные заголовки Результат при индивидуальной оценке Результат, если оценивать в комбинации
If-Modified-Since 200 OK; 412 (Предварительное условие не выполнено)
If-Match 412 (Предварительное условие не выполнено) 412 (Предварительное условие не выполнено)
If-Unmodified-Since 200 OK; 412 (Предварительное условие не выполнено)
If-Modified-Since 200 OK; 412 (Предварительное условие не выполнено)
If-Match 200 OK; 412 (Предварительное условие не выполнено)
If-Unmodified-Since 412 (Предварительное условие не выполнено) 412 (Предварительное условие не выполнено)
If-Modified-Since 304 (не изменён) 412 (Предварительное условие не выполнено)
If-Match 200 OK; 412 (Предварительное условие не выполнено)
If-Unmodified-Since 412 (Предварительное условие не выполнено) 412 (Предварительное условие не выполнено)
If-Modified-Since 304 (не изменён) 304 (не изменён)
If-Match 200 OK; 304 (не изменён)
If-Unmodified-Since 200 OK; 304 (не изменён)

Пример 4:

Рассмотрим запрос, содержащий If-Modified-Since, If-None-Match, If-Unmodified-Sinceи If-Match заголовки.

Сочетание Индивидуальный статус HTTP Получить результат статуса Blob
If-Modified-Since 200 OK; 200 OK;
If-None-Match 200 OK; 200 OK;
If-Unmodified-Since 200 OK; 200 OK;
If-Match 200 OK; 200 OK;
If-Modified-Since 200 OK; 412 (Предварительное условие не выполнено)
If-None-Match 304 (не изменён) 412 (Предварительное условие не выполнено)
If-Unmodified-Since 412 (Предварительное условие не выполнено) 412 (Предварительное условие не выполнено)
If-Match 200 OK; 412 (Предварительное условие не выполнено)
If-Modified-Since 200 OK; 200 OK;
If-None-Match 304 (не изменён) 200 OK;
If-Unmodified-Since 200 OK; 200 OK;
If-Match 200 OK; 200 OK;
If-Modified-Since 304 (не изменён) 412 (Предварительное условие не выполнено)
If-None-Match 200 OK; 412 (Предварительное условие не выполнено)
If-Unmodified-Since 200 OK; 412 (Предварительное условие не выполнено)
If-Match 412 (Предварительное условие не выполнено) 412 (Предварительное условие не выполнено)
If-Modified-Since 304 (не изменён) 412 (Предварительное условие не выполнено)
If-None-Match 200 OK; 412 (Предварительное условие не выполнено)
If-Unmodified-Since 412 (Предварительное условие не выполнено) 412 (Предварительное условие не выполнено)
If-Match 412 (Предварительное условие не выполнено) 412 (Предварительное условие не выполнено)
If-Modified-Since 304 (не изменён) 200 OK;
If-None-Match 200 OK; 200 OK;
If-Unmodified-Since 200 OK; 200 OK;
If-Match 200 OK; 200 OK;
If-Modified-Since 304 (не изменён) 412 (Предварительное условие не выполнено)
If-None-Match 304 (не изменён) 412 (Предварительное условие не выполнено)
If-Unmodified-Since 412 (Предварительное условие не выполнено) 412 (Предварительное условие не выполнено)
If-Match 200 OK; 412 (Предварительное условие не выполнено)

Указывать условные заголовки для операций чтения в версиях до 15.08.2013 и для операций записи (все версии)

Вызывая операции чтения сервиса Blob (Get Blob и Get Blob Properties) с версиями старше 15.08.2013, а также при вызове любой операции записи независимо от версии, учитывайте следующие моменты:

  • Если запрос указывает оба If-None-Match заголовка и If-Modified-Since , запрос оценивается на основе критериев, указанных в If-None-Match.

  • Если запрос указывает оба If-Match заголовка и If-Unmodified-Since , запрос оценивается на основе критериев, указанных в If-Match.

  • За исключением двух ранее перечисленных комбинаций условных заголовков, запрос может указывать только один условный заголовок. Указание более одного условного заголовка приводит к коду статуса 400 (Bad Request).

  • Если в ответе есть ETag, проверьте версию запроса и ответа перед обработкой ETag. Например, версии 2011-08-18 и более поздние возвращают цитируемый ETag, а старые версии — нет. Убедитесь, что ваша заявка может обработать оба формата ETag до их оценки.

  • RFC 2616 допускает несколько значений ETag в одном заголовке, но запросы к сервису Blob могут содержать только одно значение ETag. Указание более одного значения ETag приводит к коду статуса 400 (Bad Request).

Операции, поддерживающие условные заголовки

Операции, поддерживающие условные заголовки, описаны в следующей таблице.

Работа REST Тип операции Поддерживаемые условные заголовки
Добавить блок

(версия 2015-02-21 и позже)
Напишите If-Modified-Since

Если-Немодифицированный-Поскольку

If-Match

Если-Нет-Совпадение

x-ms-if-теги
Блокировать добавление с URL

(версия 2018-11-09 и позже)
Напишите If-Modified-Since

Если-Немодифицированный-Поскольку

If-Match

Если-Нет-Совпадение

x-ms-if-теги
Копирование БОЛЬШОго двоичного объекта Чтение и запись Для условий на целевом блобе:

- If-Modified-Since

- Если-Немодифицированный-Поскольку

- If-Match

- Если-Нет-Совпадение

- x-ms-if-теги

Для условий на исходном блобе:

- x-ms-source-if-modified-since

- x-ms-source-if-unmodified-since

- x-ms-source-if-match

- x-ms-source-if-none-match

- x-ms-source-if-теги
Удаление BLOB-объекта Напишите If-Modified-Since

Если-Немодифицированный-Поскольку

If-Match

Если-Нет-Совпадение

x-ms-if-теги

x-ms-access-tier-if-modified-since

x-ms-access-tier-if-unmodified-since
Удаление контейнера Напишите If-Modified-Since

Если-Немодифицированный-Поскольку
Заберите Blob Читайте If-Modified-Since

Если-Немодифицированный-Поскольку

If-Match

Если-Нет-Совпадение

x-ms-if-теги
Получение метаданных BLOB-объекта Читайте If-Modified-Since

Если-Немодифицированный-Поскольку

If-Match

Если-Нет-Совпадение

x-ms-if-теги
Получение свойств объекта Blob Читайте If-Modified-Since

Если-Немодифицированный-Поскольку

If-Match

Если-Нет-Совпадение

x-ms-if-теги
Получение тегов BLOB

Читайте x-ms-if-теги (версии 2019-12-12 и далее)

Для условий на блобе (версия 2025-11-05 и далее):

- x-ms-blob-if-modified-поскольку

- x-ms-blob-if-unmodified-поскольку

- x-ms-blob-if-match

- x-ms-blob-если-нет-совпадение
Get block list Читайте x-ms-if-теги
Получите диапазоны страниц Читайте If-Modified-Since

Если-Немодифицированный-Поскольку

If-Match

Если-Нет-Совпадение

x-ms-if-теги
Lease Blob (Аренда BLOB-объекта) Напишите If-Modified-Since

Если-Немодифицированный-Поскольку

If-Match

Если-Нет-Совпадение

x-ms-if-теги
Аренда контейнера Напишите If-Modified-Since

Если-Немодифицированный-Поскольку
Вставьте blob из URL Напишите If-Modified-Since

Если-Немодифицированный-Поскольку

If-Match

Если-Нет-Совпадение

Для условий на исходном блобе:

- x-ms-source-if-modified-since

- x-ms-source-if-Unmodified-Since

- x-ms-source-if-match

- x-ms-source-если-нет-совпадение

вставка большого двоичного объекта; Напишите If-Modified-Since

Если-Немодифицированный-Поскольку

If-Match

Если-Нет-Совпадение

x-ms-if-теги
Поставить блокировку с URL

(версия 2018-03-28 и более поздняя)
Напишите x-ms-source-if-modified-since

x-ms-source-if-unmodified-since

x-ms-source-if-match

x-ms-source-если-нет-совпадение
Список блокировок путей Напишите If-Modified-Since

Если-Немодифицированный-Поскольку

If-Match

Если-Нет-Совпадение

x-ms-if-теги
Установить страницу Напишите If-Modified-Since

Если-Немодифицированный-Поскольку

If-Match

Если-Нет-Совпадение

x-ms-if-теги
Вставьте страницу с URL

(версия 2018-11-09 и позже)
Напишите If-Modified-Since

Если-Немодифицированный-Поскольку

If-Match

Если-Нет-Совпадение

x-ms-if-теги
Настройка метаданных BLOB-объектов Напишите If-Modified-Since

Если-Немодифицированный-Поскольку

If-Match

Если-Нет-Совпадение

x-ms-if-теги
задание свойств службы BLOB-объекта. Напишите If-Modified-Since

Если-Немодифицированный-Поскольку

If-Match

Если-Нет-Совпадение

x-ms-if-теги
Настройка ACL контейнера Напишите If-Modified-Since

Если-Немодифицированный-Поскольку
Set Container Metadata Напишите If-Modified-Since
Установка тегов BLOB

Напишите x-ms-if-теги (версии 2019-12-12 и далее)

Для условий на блобе (версия 2025-11-05 и далее):

- x-ms-blob-if-modified-поскольку

- x-ms-blob-if-unmodified-поскольку

- x-ms-blob-if-match

- x-ms-blob-если-нет-совпадение
Установить уровень блоба Напишите x-ms-if-теги
Snapshot Blob Читайте If-Modified-Since

Если-Немодифицированный-Поскольку

If-Match

Если-Нет-Совпадение

x-ms-if-теги
Set Blob Immutability Policy Напишите Если-Немодифицированный-Поскольку

Следующие операции с данными сервиса Blob в настоящее время не поддерживают условные заголовки:

HTTP-коды ответа для операций, поддерживающих условные заголовки

Если запрос содержит условный заголовок, а запрашиваемый ресурс не соответствует указанному условию, сервис Blob возвращает HTTP-код ответа. Возвращаемые коды ответов соответствуют спецификации протокола HTTP/1.1 (RFC 2616).

Методы в клиентской библиотеке Azure .NET преобразуют эти коды ответов на ошибки в объект StorageException.

Операции чтения

В следующей таблице указаны коды отклика, возвращаемые для невыполненного условия для каждого условного заголовка, когда операция является операцией чтения. Операции чтения используют глаголы GET или HEAD.

Условный заголовок Код ответа, если условие не выполнено
If-Modified-Since Не модифицировано (304 (не изменено))
If-Unmodified-Since Предварительное условие не выполнено (412 (предварительное условие не выполнено))
If-Match Предварительное условие не выполнено (412 (предварительное условие не выполнено))
If-None-Match Не модифицировано (304 (не изменено))

Обратитесь к предыдущим примерам для получения результатов при использовании нескольких заголовков с версиями 2013-08-15 и позже.

Операции записи

В следующей таблице указаны коды ответов, возвращаемые для невыполненного условия для каждого условного заголовка, когда операция является операцией записи. Операции записи используют глаголы PUT или DELETE.

Условный заголовок Код ответа, если условие не выполнено
If-Modified-Since Предварительное условие не выполнено (412 (предварительное условие не выполнено))
If-Unmodified-Since Предварительное условие не выполнено (412 (предварительное условие не выполнено))
If-Match Предварительное условие не выполнено (412 (предварительное условие не выполнено))
If-None-Match Предварительное условие не выполнено (412 (предварительное условие не выполнено))

Операции копирования

Следующая таблица показывает коды ответа, возвращаемые для невыполненного условия для каждого условного заголовка, когда операция является операцией копирования. Операция Copy Blob использует глаголы PUT.

Условный заголовок Код ответа, если условие не выполнено
If-Modified-Since Предварительное условие не выполнено (412 (предварительное условие не выполнено))
If-Unmodified-Since Предварительное условие не выполнено (412 (предварительное условие не выполнено))
If-Match Предварительное условие не выполнено (412 (предварительное условие не выполнено))
If-None-Match Предварительное условие не выполнено (412 (предварительное условие не выполнено))
x-ms-source-if-modified-since Предварительное условие не выполнено (412 (предварительное условие не выполнено))
x-ms-source-if-unmodified-since Предварительное условие не выполнено (412 (предварительное условие не выполнено))
x-ms-source-if-match Предварительное условие не выполнено (412 (предварительное условие не выполнено))
x-ms-source-if-none-match Предварительное условие не выполнено (412 (предварительное условие не выполнено))

Теги Условные операции

В дополнение к стандартным условным заголовкам HTTP, поддерживаемым сервисом Blob, несколько операций также поддерживают условия против тегов на ресурсе blob.

Условный заголовок Description
x-ms-if-tags Версия 2019-12-12 и новее. Некоторое значение TagsPredicate. Закажите этот заголовок для выполнения операции только если предикат вычисляется по true тегам blob.
x-ms-source-if-tags Версия 2019-12-12 и новее. Относится только к Copy Blob. Некоторое значение TagsPredicate. Закажите этот заголовок для выполнения операции только если предикат оценивается true по тегам исходного blob.

Если x-ms-if-tagsx-ms-source-if-tags условный заголовок или присутствует в запросе и TagsPredicate оценивается до false, сервис Blob возвращает код ошибки 412 (предусловие невыполнено) для операции.

Вызывающий должен иметь разрешение на чтение тегов на блобе, чтобы использовать x-ms-if-tags условные заголовки x-ms-source-if-tags .

Теги Синтаксис предиката

Сервис Blob поддерживает подмножество грамматики клаузы ANSI SQL WHERE для значения TagsPredicate заголовка. Поддерживаются следующие операторы:

Operator Description Example
= Equal Status = 'In Progress'
<> Не равно Status <> 'Done'
> Больше чем LastModified > '2018-06-18 20:51:26Z'
>= Больше или равно Priority >= '05'
< Меньше Age < '032'
<= Меньше или равно Reviewer <= 'Smith'
AND Логическое И Name > 'C' AND Name < 'D'
Age > '032' AND Age < '100'
OR Логическое ИЛИ Status = 'Done' or LastModified > '2018-06-18 20:51:26Z'

Все значения тегов являются строками, а поддерживаемые бинарные реляционные операторы используют лексикографическую сортировку значений тегов. Для поддержки нестроковых типов данных, включая номера и даты, необходимо использовать соответствующее дополнение и сортируемое форматирование. Значения тегов должны содержаться в отдельных кавычках.

Если имена тегов — это обычные SQL-идентификаторы, они могут присутствовать без выхода. Если в них содержатся специальные символы, их необходимо разделить двойными кавычками, такими "TagName" = 'TagValue'как .

Выражения могут включать сравнения для нескольких имен и значений тегов. Скобки (( и )) могут использоваться для группировки логических выражений и управления каноническим порядком работы. A TagsPredicate может включать не более 10 логических операций.

Служба хранения отклоняет любой запрос с недействительным выражением с кодом ошибки 400 (Плохой запрос).

См. также

Концепции сервиса Blob