Продажи: 1-800-867-1389

Указание условных заголовков для операций со службой BLOB-объектов

Обновлено: Февраль 2014 г.

Несколько операций в службе BLOB-объектов поддерживают использование условных заголовков. Условные заголовки можно указывать для выполнения операции только при указанном условии.

Служба BLOB-объектов работает с условными заголовками в соответствии со спецификацией протокола HTTP/1.1.

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

 

Условный заголовок Описание

If-Modified-Since

Значение DateTime. Укажите этот заголовок для выполнения операции только в том случае, если ресурс был изменен в указанное время.

If-Unmodified-Since

Значение DateTime. Укажите этот заголовок для выполнения операции только в том случае, если ресурс не был изменен в указанные дату и время.

If-Match

Значение ETag. Укажите этот заголовок для выполнения операции только в том случае, если ETag ресурса соответствует указанному значению. В версии 2011-08-18 и более новой ETag можно указывать в кавычках.

If-None-Match

Значение ETag или символ-шаблон (*). Укажите этот заголовок для выполнения операции только в том случае, если ETag ресурса не соответствует указанному значению. В версии 2011-08-18 и более новой ETag можно указывать в кавычках.

Укажите символ-шаблон (*) для выполнения операции только в том случае, если ресурс не существует, и отказа от операции, если он существует.

Начиная с версии 2013-08-15 операции Get Blob (REST API) и Get Blob Properties (REST API) поддерживают использование нескольких условных заголовков. Можно указать любое сочетание поддерживаемых условных заголовков. Служба 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 (REST API), содержащий заголовки If-Match и If-Modified-Since. В следующей таблице показан результаты, которые формируются при вычислении заголовков по отдельности и при их совокупном вычислении.

 

Условные заголовки Результат при вычислении по отдельности Результат при вычислении в сочетании

If-Match

412 (Необходимое условие не выполнено)

412 (Необходимое условие не выполнено)

If-Modified-Since

200 (OK)

If-Match

412 (Необходимое условие не выполнено)

412 (Необходимое условие не выполнено)

If-Modified-Since

304 (Не изменено)

If-Match

200 (OK)

200 (OK)

If-Modified-Since

200 (OK)

If-Match

200 (OK)

304 (Не изменено)

If-Modified-Since

304 (Не изменено)

Пример 2.

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

 

Условные заголовки Результат при вычислении по отдельности Результат при вычислении в сочетании

If-None-Match

304 (Не изменено)

200 (OK)

If-Modified-Since

200 (OK)

If-None-Match

200 (OK)

200 (OK)

If-Modified-Since

200 (OK)

If-None-Match

200 (OK)

200 (OK)

If-Modified-Since

304 (Не изменено)

If-None-Match

304 (Не изменено)

304 (Не изменено)

If-Modified-Since

304 (Не изменено)

Пример 3.

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

 

Условные заголовки Результат при вычислении по отдельности Результат при вычислении в сочетании

If-Modified-Since

200 (OK)

412 (Необходимое условие не выполнено)

If-Match

412 (Необходимое условие не выполнено)

If-Unmodified-Since

200 (OK)

If-Modified-Since

200 (OK)

412 (Необходимое условие не выполнено)

If-Match

200 (OK)

If-Unmodified-Since

412 (Необходимое условие не выполнено)

If-Modified-Since

304 (Не изменено)

412 (Необходимое условие не выполнено)

If-Match

200 (OK)

If-Unmodified-Since

412 (Необходимое условие не выполнено)

If-Modified-Since

304 (Не изменено)

304 (Не изменено)

If-Match

200 (OK)

If-Unmodified-Since

200 (OK)

Пример 4.

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

 

Сочетание Отдельный код состояния HTTP Получение результата состояния большого двоичного объекта

If-Modified-Since

200 (OK)

200 (OK)

If-None-Match

200 (OK)

If-Unmodified-Since

200 (OK)

If-Match

200 (OK)

If-Modified-Since

200 (OK)

412 (Необходимое условие не выполнено)

If-None-Match

304 (Не изменено)

If-Unmodified-Since

412 (Необходимое условие не выполнено)

If-Match

200 (OK)

If-Modified-Since

200 (OK)

200 (OK)

If-None-Match

304 (Не изменено)

If-Unmodified-Since

200 (OK)

If-Match

200 (OK)

If-Modified-Since

304 (Не изменено)

412 (Необходимое условие не выполнено)

If-None-Match

200 (OK)

If-Unmodified-Since

200 (OK)

If-Match

412 (Необходимое условие не выполнено)

If-Modified-Since

304 (Не изменено)

412 (Необходимое условие не выполнено)

If-None-Match

200 (OK)

If-Unmodified-Since

412 (Необходимое условие не выполнено)

If-Match

412 (Необходимое условие не выполнено)

If-Modified-Since

304 (Не изменено)

200 (OK)

If-None-Match

200 (OK)

If-Unmodified-Since

200 (OK)

If-Match

200 (OK)

If-Modified-Since

304 (Не изменено)

412 (Необходимое условие не выполнено)

If-None-Match

304 (Не изменено)

If-Unmodified-Since

412 (Необходимое условие не выполнено)

If-Match

200 (OK)

При вызове операций чтения службы BLOB-объектов (Get Blob (REST API) и Get Blob Properties (REST API)) с версиями до 2013-08-15, и при вызове любых операций записи независимо от версии, учитывайте следующее:

  • Если в запросе указаны заголовки 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

Тип операции

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

Копирование большого двоичного объекта (REST API)

Чтение и запись

Для условий в целевом BLOB-объекте:

  • If-Modified-Since 

  • If-Unmodified-Since 

  • If-Match 

  • If-None-Match 

Для условий в BLOB-объекте источника:

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

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

  • x-ms-source-if-match 

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

Delete Blob (REST API)

Запись

If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

Удаление контейнера (REST API)

Запись

If-Modified-Since

If-Unmodified-Since

Get Blob (REST API)

Чтение

If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

Получение метаданных BLOB-объектов (REST API)

Чтение

If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

Get Blob Properties (REST API)

Чтение

If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

Получение диапазонов страниц (REST API)

Запись

If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

Аренда больших двоичных объектов (REST API)

Запись

If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

Аренда контейнера (REST API)

Запись

If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

Вставка большого двоичного объекта (REST API)

Запись

If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

Вставка списка блокировок (REST API)

Запись

If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

Put Page (REST API)

Запись

If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

Задание метаданных BLOB-объектов (REST API)

Запись

If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

Set Blob Properties (REST API)

Запись

If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

Задание списка управления доступом для контейнера (REST API)

Запись

If-Modified-Since

If-Unmodified-Since

Set Container Metadata (REST API)

Запись

If-Modified-Since

Моментальные снимки больших двоичных объектов (REST API)

Чтение

If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

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

Если запрос включает условный заголовок и запрошенный ресурс не удовлетворяет указанному условию, то служба BLOB-объектов возвращает код ответа HTTP. Возвращаемые коды ответа соответствуют спецификации протокола HTTP/1.1 (RFC 2616). Методы в библиотеках Windows Azure .NET преобразуют эти коды ошибок в ответе в StorageClientException и заполняют свойство StatusCode значением из перечисления System.Net.HttpStatusCode. Образец кода, который обрабатывает исключения, вызванные условной операцией, см. в разделе Условное обновление локальной копии blob-объекта.

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

В следующей таблице показаны коды ответа, возвращаемые при несоблюдении условия для каждого условного заголовка в случае, если операцией является операция копирования. Операция Копирование большого двоичного объекта (REST API) использует команды 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 (Необходимое условие не выполнено))

См. также

Была ли вам полезна эта информация?
(1500 символов осталось)
Спасибо за ваш отзыв
Корпорация Майкрософт проводит интернет-опрос, чтобы выяснить ваше мнение о веб-сайте MSDN. Если вы желаете принять участие в этом интернет-опросе, он будет отображен при закрытии веб-сайта MSDN.

Вы хотите принять участие?
Показ:
© 2014 Microsoft