Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Несколько сервисных операций 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 (Плохой запрос).