BLOB サービス操作の条件付きヘッダーの指定

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 以降での BLOB サービス読み取り操作のための条件ヘッダーの指定

バージョン 2013-08-15 以降では、BLOB の取得操作と GET BLOB プロパティ操作で複数の条件付きヘッダーがサポートされています。 サポートされている条件ヘッダーの任意の組み合わせを指定できます。 BLOB Service は、次の式に基づいてこれらの条件を評価します。

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

また、If-Match および If-None-Match に複数のコンマ区切り値を指定することもできます。 If-Match に複数の値を指定すると、BLOB Service は、指定されたすべての値に対して論理 OR 操作を実行してから、式全体を評価します。 if-None-Match に複数の値を指定すると、サービスは、論理 AND 操作を実行してから、式全体を評価します。 If-Modified-SinceIf-Unmodified-Since に複数の値を指定することはサポートされていません。その場合はエラー コード 400 (Bad Request) が返されます。

この機能は、HTTP/1.1 の仕様に準拠し、Content Delivery Network (CDN) またはプロキシ サーバーが未完了要求に追加の条件付きヘッダーを追加するシナリオに対応するために有効になっています。 条件ヘッダーの異なる組み合わせの例を以下に示します。

例 1:

とヘッダーを含む Blob の取得要求をIf-MatchIf-Modified-Since検討してください。 次の表に、ヘッダーが個別に評価された場合の結果と、ヘッダーの組み合わせが評価された場合の結果を示します。

条件ヘッダー 個別に評価された場合の結果 組み合わせが評価された場合の結果
If-Match 412 (Precondition Failed) 412 (Precondition Failed)
If-Modified-Since 200 (OK) 412 (Precondition Failed)
If-Match 412 (Precondition Failed) 412 (Precondition Failed)
If-Modified-Since 304 (Not Modified) 412 (Precondition Failed)
If-Match 200 (OK) 200 (OK)
If-Modified-Since 200 (OK) 200 (OK)
If-Match 200 (OK) 304 (Not Modified)
If-Modified-Since 304 (Not Modified) 304 (Not Modified)

例 2:

要求に If-None-Match ヘッダーと If-Modified-Since ヘッダーが含まれているとします。

条件ヘッダー 個別に評価された場合の結果 組み合わせが評価された場合の結果
If-None-Match 304 (Not Modified) 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 (Not Modified) 200 (OK)
If-None-Match 304 (Not Modified) 304 (Not Modified)
If-Modified-Since 304 (Not Modified) 304 (Not Modified)

例 3:

要求に If-Modified-SinceIf-Match、および If-Unmodified-Since の各ヘッダーが含まれているとします。

条件ヘッダー 個別に評価された場合の結果 組み合わせが評価された場合の結果
If-Modified-Since 200 (OK) 412 (Precondition Failed)
If-Match 412 (Precondition Failed) 412 (Precondition Failed)
If-Unmodified-Since 200 (OK) 412 (Precondition Failed)
If-Modified-Since 200 (OK) 412 (Precondition Failed)
If-Match 200 (OK) 412 (Precondition Failed)
If-Unmodified-Since 412 (Precondition Failed) 412 (Precondition Failed)
If-Modified-Since 304 (Not Modified) 412 (Precondition Failed)
If-Match 200 (OK) 412 (Precondition Failed)
If-Unmodified-Since 412 (Precondition Failed) 412 (Precondition Failed)
If-Modified-Since 304 (Not Modified) 304 (Not Modified)
If-Match 200 (OK) 304 (Not Modified)
If-Unmodified-Since 200 (OK) 304 (Not Modified)

例 4:

要求に If-Modified-SinceIf-None-MatchIf-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 (Precondition Failed)
If-None-Match 304 (Not Modified) 412 (Precondition Failed)
If-Unmodified-Since 412 (Precondition Failed) 412 (Precondition Failed)
If-Match 200 (OK) 412 (Precondition Failed)
If-Modified-Since 200 (OK) 200 (OK)
If-None-Match 304 (Not Modified) 200 (OK)
If-Unmodified-Since 200 (OK) 200 (OK)
If-Match 200 (OK) 200 (OK)
If-Modified-Since 304 (Not Modified) 412 (Precondition Failed)
If-None-Match 200 (OK) 412 (Precondition Failed)
If-Unmodified-Since 200 (OK) 412 (Precondition Failed)
If-Match 412 (Precondition Failed) 412 (Precondition Failed)
If-Modified-Since 304 (Not Modified) 412 (Precondition Failed)
If-None-Match 200 (OK) 412 (Precondition Failed)
If-Unmodified-Since 412 (Precondition Failed) 412 (Precondition Failed)
If-Match 412 (Precondition Failed) 412 (Precondition Failed)
If-Modified-Since 304 (Not Modified) 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 (Not Modified) 412 (Precondition Failed)
If-None-Match 304 (Not Modified) 412 (Precondition Failed)
If-Unmodified-Since 412 (Precondition Failed) 412 (Precondition Failed)
If-Match 200 (OK) 412 (Precondition Failed)

2013-08-15 より前のバージョンでの条件ヘッダーの指定と、書き込み操作のための条件ヘッダーの指定 (すべてのバージョン)

2013-08-15 より前のバージョンで BLOB サービスの読み取り操作 (BLOB の取得BLOB プロパティの取得) を呼び出すとき、およびバージョンに関係なく書き込み操作を呼び出すときは、次の点に注意してください。

  • If-None-Match ヘッダーと If-Modified-Since ヘッダーが両方とも指定されている要求は、If-None-Match に指定されている条件に基づいて評価されます。

  • If-Match ヘッダーと If-Unmodified-Since ヘッダーが両方とも指定されている要求は、If-Match に指定されている条件に基づいて評価されます。

  • 前に示した 2 とおりの条件ヘッダーの組み合わせは例外として、要求には条件ヘッダーを 1 つのみ指定できます。 複数の条件ヘッダーを指定すると、ステータス コード 400 (Bad Request) が返されます。

  • 応答に ETag が含まれていた場合は、要求と応答のバージョンを検証してから ETag を処理してください。 たとえば、バージョン 2011-08-18 以降では、引用符に囲まれた ETag が返されますが、それより前のバージョンではそのようになっていません。 どちらの形式にでも対応できるよう ETag 形式を処理してから ETag を評価するようにアプリケーションを設計してください。

  • RFC 2616 では、1 つのヘッダーで複数の ETag 値を使用できますが、BLOB サービスへの要求には 1 つの ETag 値のみを含めることができます。 複数の ETag 値を指定すると、ステータス コード 400 (Bad Request) が返されます。

条件ヘッダーをサポートしている操作

条件ヘッダーをサポートしている操作を次の表に示します。

REST 操作 操作の種類 サポートされている条件ヘッダー
Append Block

(バージョン 2015-02-21 以降)
Write If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-ms-if-tags
Append Block From URL

(バージョン 2018-11-09 以降)
Write If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-ms-if-tags
Copy Blob 読み取りと書き込み コピー先における条件:

- If-Modified-Since

- If-Unmodified-Since

- If-Match

- If-None-Match

- x-ms-if-tags

コピー元における条件:

- 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-tags
Delete Blob Write If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-ms-if-tags
Delete Container Write If-Modified-Since

If-Unmodified-Since
Get Blob Read If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-ms-if-tags
Get Blob Metadata Read If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-ms-if-tags
Get Blob Properties Read If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-ms-if-tags
BLOB タグの取得

(バージョン 2019-12-12 以降)
Read x-ms-if-tags
Get Block List Read x-ms-if-tags
Get Page Ranges Read If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-ms-if-tags
Lease Blob Write If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-ms-if-tags
Lease Container Write If-Modified-Since

If-Unmodified-Since
Put Blob From URL Write If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

コピー元における条件:

- x-ms-source-If-Modified-Since

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

- x-ms-source-If-Match

- x-ms-source-If-None-Match

Put Blob Write If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-ms-if-tags
Put Block From URL

(バージョン 2018-03-28 以降)
Write x-ms-source-If-Modified-Since

x-ms-source-If-Unmodified-Since

x-ms-source-If-Match

x-ms-source-If-None-Match
Put Block List Write If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-ms-if-tags
Put Page Write If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-ms-if-tags
Put Page From URL

(バージョン 2018-11-09 以降)
Write If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-ms-if-tags
Set Blob Metadata Write If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-ms-if-tags
Set Blob Properties Write If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-ms-if-tags
コンテナー ACL の設定 Write If-Modified-Since

If-Unmodified-Since
コンテナー メタデータの設定 Write If-Modified-Since
BLOB タグの設定

(バージョン 2019-12-12 以降)
Write x-ms-if-tags
Set Blob Tier 読み取りまたは書き込み x-ms-if-tags
Snapshot Blob Read If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

x-ms-if-tags
BLOB 不変ポリシーを設定する Write If-Unmodified-Since

現在、次の BLOB サービスのデータ操作では、条件ヘッダーがサポートされません。

条件ヘッダーをサポートする操作の HTTP 応答コード

要求に条件ヘッダーが指定されている場合に、要求の対象となっているリソースが指定の条件を満たしていないときは、BLOB サービスは HTTP 応答コードを返します。 返される応答コードは、HTTP/1.1 プロトコル仕様 (RFC 2616) に準拠しています。

Azure .NET クライアント ライブラリのメソッドは、これらのエラー応答コードを StorageException オブジェクトに変換します。

読み取り操作

読み取り操作に指定される各条件ヘッダーについて、条件が満たされなかった場合に返される応答コードを次の表に示します。 読み取り操作では、GET 動詞または HEAD 動詞が使用されます。

条件ヘッダー 条件が満たされなかった場合の応答コード
If-Modified-Since Not Modified (304 (Not Modified))
If-Unmodified-Since Precondition Failed (412 (Precondition Failed))
If-Match Precondition Failed (412 (Precondition Failed))
If-None-Match Not Modified (304 (Not Modified))

2013-08-15 以降のバージョンで複数のヘッダーを使用した場合の結果については、上記の例を参照してください。

書き込み操作

書き込み操作に指定される各条件ヘッダーについて、条件が満たされなかった場合に返される応答コードを次の表に示します。 書き込み操作では、PUT 動詞または DELETE 動詞が使用されます。

条件ヘッダー 条件が満たされなかった場合の応答コード
If-Modified-Since Precondition Failed (412 (Precondition Failed))
If-Unmodified-Since Precondition Failed (412 (Precondition Failed))
If-Match Precondition Failed (412 (Precondition Failed))
If-None-Match Precondition Failed (412 (Precondition Failed))

コピー操作

コピー操作に指定される各条件ヘッダーについて、条件が満たされなかった場合に返される応答コードを次の表に示します。 BLOB のコピー操作では、動詞 PUT が使用されます。

条件ヘッダー 条件が満たされなかった場合の応答コード
If-Modified-Since Precondition Failed (412 (Precondition Failed))
If-Unmodified-Since Precondition Failed (412 (Precondition Failed))
If-Match Precondition Failed (412 (Precondition Failed))
If-None-Match Precondition Failed (412 (Precondition Failed))
x-ms-source-if-modified-since Precondition Failed (412 (Precondition Failed))
x-ms-source-if-unmodified-since Precondition Failed (412 (Precondition Failed))
x-ms-source-if-match Precondition Failed (412 (Precondition Failed))
x-ms-source-if-none-match Precondition Failed (412 (Precondition Failed))

タグの条件付き操作

BLOB サービスでサポートされる標準の HTTP 条件付きヘッダーに加えて、複数の操作で BLOB リソースのタグに対する条件もサポートされます。

条件ヘッダー 説明
x-ms-if-tags バージョン 2019-12-12 以降。 TagsPredicate 値。 述語が BLOB のタグに対して評価される場合にのみ、このヘッダーを指定して true 操作を実行します。
x-ms-source-if-tags バージョン 2019-12-12 以降。 BLOB のコピーにのみ適用されます。 TagsPredicate 値。 述語がソース BLOB のタグに対して評価される場合にのみ、このヘッダーを指定して true 操作を実行します。

要求にx-ms-if-tagsまたはx-ms-source-if-tags条件付きヘッダーが存在し、評価falseされたTagsPredicate場合、BLOB サービスは操作のエラー コード 412 (前提条件の失敗) を返します。

呼び出し元には、BLOB のタグを読み取って、またはx-ms-source-if-tags条件付きヘッダーを使用するためのアクセス許可がx-ms-if-tags必要です。

タグ述語の構文

BLOB サービスでは、ヘッダーの値に対する ANSI SQL WHERE 句文法のサブセットがTagsPredicateサポートされています。 次の演算子がサポートされています。

演算子 説明
= 等しい Status = 'In Progress'
<> 等しくない Status <> 'Done'
> より大きい LastModified > '2018-06-18 20:51:26Z'
>= 以上 Priority >= '05'
< より小さい Age < '032'
<= 以下 Reviewer <= 'Smith'
AND 論理 AND Name > 'C' AND Name < 'D'
Age > '032' AND Age < '100'
OR 論理 OR Status = 'Done' or LastModified > '2018-06-18 20:51:26Z'

すべてのタグ値は文字列であり、サポートされているバイナリ 関係演算子はタグ値の辞書式並べ替えを使用します。 数値や日付を含む文字列以外のデータ型をサポートするには、適切なパディングと並べ替え可能な書式設定を使用する必要があります。 タグの値は一重引用符で囲む必要があります。

タグ名が通常のSQL識別子である場合は、エスケープせずに存在する可能性があります。特殊文字が含まれている場合は、二重引用符 (例: "TagName" = 'TagValue') で区切る必要があります。

式には、複数のタグ名と値の比較が含まれる場合があります。 かっこ (( および )) を使用して、論理式をグループ化し、操作の正規順序を制御できます。 A TagsPredicate には、最大 10 個の論理操作を含めることができます。

ストレージ サービスは、エラー コード 400 (無効な要求) を含む無効な式を含む要求を拒否します。

参照

BLOB サービスの概念