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 を指定できます。

ワイルドカード文字 (*) を指定すると、リソースが存在しない場合に限り操作が実行されます。リソースが存在する場合は、操作は失敗します。

バージョン 2013-08-15 以降での BLOB サービス読み取り操作のための条件ヘッダーの指定

バージョン 2013-08-15 以降では、 BLOB の取得 操作と 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 仕様 に準拠し、コンテンツ配信ネットワーク (CDN) またはプロキシ サーバーが機内要求に追加の条件付きヘッダーを追加するシナリオに対応するために有効になっています。 条件ヘッダーの異なる組み合わせの例を以下に示します。

例 1:

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

条件ヘッダー 個別に評価された場合の結果 組み合わせが評価された場合の結果
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 サービスへの要求に含めることができる ETag 値は 1 つだけです。 複数の 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
BLOB 層の設定 読み取りまたは書き込み 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 リソースのタグに対する条件もサポートされています。

条件ヘッダー Description
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 条件ヘッダーが要求に存在し、 TagsPredicate が にfalse評価された場合、BLOB サービスは操作のエラー コード 412 (前提条件に失敗) を返します。

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

タグ述語の構文

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

演算子 Description
= 等しい 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') で区切る必要があります。

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

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

参照

BLOB サービスの概念