Перейти к основному содержимому

Условные запросы

Последнее изменение:

Условные запросы (Conditional Requests) в S3 API позволяют выполнять операции только при соблюдении определенных условий с помощью заголовков. С их помощью можно:

  • выполнять запросы на чтение и запись с предварительной проверкой состояния объекта;
  • управлять обновлениями и загрузками объектов, опираясь на их текущее состояние или метаданные;
  • соответствовать привычным сценариям работы по стандартам S3;
  • защитить данные от случайных перезаписей;
  • оптимизировать расходы на трафик.

Условные запросы можно использовать для разных сценариев.

Заголовки

ОперацияПоддерживаемые заголовки
PutObject
  • If-Match
  • If-None-Match
CopyObject
  • x-amz-copy-source-if-match
  • x-amz-copy-source-if-none-match
  • x-amz-copy-source-if-modified-since
  • x-amz-copy-source-if-unmodified-since
UploadPartCopy
  • x-amz-copy-source-if-match
  • x-amz-copy-source-if-none-match
  • x-amz-copy-source-if-modified-since
  • x-amz-copy-source-if-unmodified-since
DeleteObjectIf-Match
CompleteMultipartUpload
  • If-Match
  • If-None-Match

Операции PutObject

ЗаголовокУсловное выполнениеОшибка при нарушении
If-MatchОбъект записывается, если активная версия существует и ее ETag совпадает со значением, указанным в заголовке412 Precondition Failed
If-None-MatchОбъект записывается, если у ключа нет активной версии, включая delete marker412 Precondition Failed

Операции CopyObject и UploadPartCopy

ЗаголовокУсловное выполнениеОшибка при нарушении
x-amz-copy-source-if-matchОбъект копируется, если ETag исходного объекта совпадает со значением, указанным в заголовке412 Precondition Failed
x-amz-copy-source-if-none-matchОбъект копируется, если ETag исходного объекта не совпадает со значением, указанным в заголовке412 Precondition Failed
x-amz-copy-source-if-modified-sinceОбъект копируется, если объект изменен позже даты, указанной в заголовке412 Precondition Failed
x-amz-copy-source-if-unmodified-sinceОбъект копируется, если объект не был изменен после даты, указанной в заголовке412 Precondition Failed

Операции DeleteObject

ЗаголовокУсловное выполнениеОшибка при нарушении
If-MatchОбъект удаляется, если активная версия существует и ее ETag совпадает со значением, указанным в заголовке412 Precondition Failed

Операции CompleteMultipartUpload

ЗаголовокУсловное выполнениеОшибка при нарушении
If-MatchЗавершение сегментированной загрузки выполняется, если ETag объекта совпадает со значением, указанным в заголовке412 Precondition Failed
If-None-MatchЗавершение сегментированной загрузки выполняется, если объект не существует412 Precondition Failed

Описание ошибок

404 Not FoundОбъект не найден (например, при заголовке If-Match)
409 ConflictОбъект был изменен или удален до выполнения условной операции
412 Precondition FailedУсловие в заголовке не выполнено

Примеры сценариев использования

  • защита от конфликтов при обновлении — объект будет обновлен, только если он не изменился с последнего обращения (заголовок If-Match);
  • синхронизация данных — объект будет загружен, только если он был изменен после указанного времени (заголовок If-Modified-Since);
  • оптимизация чтения — объект будет получен, только если он не совпадает с локальной версией (заголовок If-None-Match);
  • защита от перезаписи — объект не будет записан по ключу, если уже есть другой объект с таким ключом (заголовок If-None-Match).