BLOB サービス操作の条件付きヘッダーの指定
BLOB サービスの一部の操作では、条件ヘッダーを使用できます。 条件ヘッダーを指定すると、指定した条件が満たされた場合に限り操作を実行できます。
BLOB サービスは、条件付きヘッダーの HTTP/1.1 プロトコル仕様 に従います。
サポートされている条件ヘッダー
サポートされている条件ヘッダーを次の表に示します。
条件ヘッダー | 説明 |
---|---|
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-Since
と If-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-Since
、If-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-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 (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 層の設定 | Write | 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
の条件付きヘッダーが要求に存在し、 TagsPredicate
が にfalse
評価された場合、BLOB サービスは操作のエラー コード 412 (前提条件に失敗しました) を返します。
呼び出し元には、 または x-ms-source-if-tags
条件付きヘッダーを使用する BLOB のタグを読み取るアクセス許可が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')。
式には、複数のタグ名と値の比較が含まれる場合があります。 かっこ ((
と )
) を使用して、論理式をグループ化し、操作の正規の順序を制御できます。 には TagsPredicate
、最大 10 個の論理操作を含めることができます。
ストレージ サービスは、エラー コード 400 (無効な要求) を含む無効な式を含む要求を拒否します。