指定 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 服務會根據下列運算式評估這些條件:
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) 或 Proxy 伺服器將額外的條件式標頭新增至輸入要求的情況。 以下為一些條件式標頭的不同組合範例。
範例 1:
請考慮包含和 If-Modified-Since
標頭的If-Match
取得 Blob 要求。 下表指出個別評估標頭的結果,以及利用組合評估標頭的結果。
條件式標頭 | 個別評估的結果 | 利用組合評估的結果 |
---|---|---|
If-Match |
412 (先決條件失敗) | 412 (先決條件失敗) |
If-Modified-Since |
200 (確定) | 412 (先決條件失敗) |
If-Match |
412 (先決條件失敗) | 412 (先決條件失敗) |
If-Modified-Since |
304 (未修改) | 412 (先決條件失敗) |
If-Match |
200 (確定) | 200 (確定) |
If-Modified-Since |
200 (確定) | 200 (確定) |
If-Match |
200 (確定) | 304 (未修改) |
If-Modified-Since |
304 (未修改) | 304 (未修改) |
範例 2:
請考慮包含 If-None-Match
和 If-Modified-Since
標頭的要求。
條件式標頭 | 個別評估的結果 | 利用組合評估的結果 |
---|---|---|
If-None-Match |
304 (未修改) | 200 (確定) |
If-Modified-Since |
200 (確定) | 200 (確定) |
If-None-Match |
200 (確定) | 200 (確定) |
If-Modified-Since |
200 (確定) | 200 (確定) |
If-None-Match |
200 (確定) | 200 (確定) |
If-Modified-Since |
304 (未修改) | 200 (確定) |
If-None-Match |
304 (未修改) | 304 (未修改) |
If-Modified-Since |
304 (未修改) | 304 (未修改) |
範例 3:
請考慮包含 If-Modified-Since
、If-Match
和 If-Unmodified-Since
標頭的要求。
條件式標頭 | 個別評估的結果 | 利用組合評估的結果 |
---|---|---|
If-Modified-Since |
200 (確定) | 412 (先決條件失敗) |
If-Match |
412 (先決條件失敗) | 412 (先決條件失敗) |
If-Unmodified-Since |
200 (確定) | 412 (先決條件失敗) |
If-Modified-Since |
200 (確定) | 412 (先決條件失敗) |
If-Match |
200 (確定) | 412 (先決條件失敗) |
If-Unmodified-Since |
412 (先決條件失敗) | 412 (先決條件失敗) |
If-Modified-Since |
304 (未修改) | 412 (先決條件失敗) |
If-Match |
200 (確定) | 412 (先決條件失敗) |
If-Unmodified-Since |
412 (先決條件失敗) | 412 (先決條件失敗) |
If-Modified-Since |
304 (未修改) | 304 (未修改) |
If-Match |
200 (確定) | 304 (未修改) |
If-Unmodified-Since |
200 (確定) | 304 (未修改) |
範例 4:
請考慮包含 If-Modified-Since
、If-None-Match
、If-Unmodified-Since
和 If-Match
標頭的要求。
合併 | 個別 HTTP 狀態碼 | 取得 Blob 狀態結果 |
---|---|---|
If-Modified-Since |
200 (確定) | 200 (確定) |
If-None-Match |
200 (確定) | 200 (確定) |
If-Unmodified-Since |
200 (確定) | 200 (確定) |
If-Match |
200 (確定) | 200 (確定) |
If-Modified-Since |
200 (確定) | 412 (先決條件失敗) |
If-None-Match |
304 (未修改) | 412 (先決條件失敗) |
If-Unmodified-Since |
412 (先決條件失敗) | 412 (先決條件失敗) |
If-Match |
200 (確定) | 412 (先決條件失敗) |
If-Modified-Since |
200 (確定) | 200 (確定) |
If-None-Match |
304 (未修改) | 200 (確定) |
If-Unmodified-Since |
200 (確定) | 200 (確定) |
If-Match |
200 (確定) | 200 (確定) |
If-Modified-Since |
304 (未修改) | 412 (先決條件失敗) |
If-None-Match |
200 (確定) | 412 (先決條件失敗) |
If-Unmodified-Since |
200 (確定) | 412 (先決條件失敗) |
If-Match |
412 (先決條件失敗) | 412 (先決條件失敗) |
If-Modified-Since |
304 (未修改) | 412 (先決條件失敗) |
If-None-Match |
200 (確定) | 412 (先決條件失敗) |
If-Unmodified-Since |
412 (先決條件失敗) | 412 (先決條件失敗) |
If-Match |
412 (先決條件失敗) | 412 (先決條件失敗) |
If-Modified-Since |
304 (未修改) | 200 (確定) |
If-None-Match |
200 (確定) | 200 (確定) |
If-Unmodified-Since |
200 (確定) | 200 (確定) |
If-Match |
200 (確定) | 200 (確定) |
If-Modified-Since |
304 (未修改) | 412 (先決條件失敗) |
If-None-Match |
304 (未修改) | 412 (先決條件失敗) |
If-Unmodified-Since |
412 (先決條件失敗) | 412 (先決條件失敗) |
If-Match |
200 (確定) | 412 (先決條件失敗) |
在 2013-08-15 版之前的版本中指定讀取作業的條件式標頭,以及指定寫入作業的條件式標頭 (所有版本)
呼叫 Blob 服務讀取作業 (取得 Blob 和 取得 Blob 屬性 時,) 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 作業 | 作業類型 | 支援的條件式標頭 |
---|---|---|
附加區塊 (2015-02-21 版和更新版本) |
寫入 |
If-Modified-Since If-Unmodified-Since If-Match If-None-Match x-ms-if-tags |
從 URL 附加區塊 (2018-11-09 版和更新版本) |
寫入 |
If-Modified-Since If-Unmodified-Since If-Match If-None-Match x-ms-if-tags |
複製 Blob | 讀取和寫入 | 目的地 Blob 的條件: - If-Modified-Since - If-Unmodified-Since - If-Match - If-None-Match - x-ms-if-tags 來源 Blob 的條件: - 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 |
刪除 Blob | 寫入 |
If-Modified-Since If-Unmodified-Since If-Match If-None-Match x-ms-if-tags |
刪除容器 | 寫入 |
If-Modified-Since If-Unmodified-Since |
取得 Blob | 讀取 |
If-Modified-Since If-Unmodified-Since If-Match If-None-Match x-ms-if-tags |
取得 Blob 中繼資料 | 讀取 |
If-Modified-Since If-Unmodified-Since If-Match If-None-Match x-ms-if-tags |
Get Blob Properties | 讀取 |
If-Modified-Since If-Unmodified-Since If-Match If-None-Match x-ms-if-tags |
取得 Blob 標記 (2019-12-12 版和更新版本) |
讀取 | x-ms-if-tags |
取得區塊清單 | 讀取 | x-ms-if-tags |
取得頁面範圍 (機器翻譯) | 讀取 |
If-Modified-Since If-Unmodified-Since If-Match If-None-Match x-ms-if-tags |
租用 Blob | 寫入 |
If-Modified-Since If-Unmodified-Since If-Match If-None-Match x-ms-if-tags |
租用容器 | 寫入 |
If-Modified-Since If-Unmodified-Since |
從 URL 複製 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 |
放置 Blob | 寫入 |
If-Modified-Since If-Unmodified-Since If-Match If-None-Match x-ms-if-tags |
從 URL 放置區塊 (2018-03-28 版和更新版本) |
寫入 |
x-ms-source-If-Modified-Since x-ms-source-If-Unmodified-Since x-ms-source-If-Match x-ms-source-If-None-Match |
放置區塊清單 | 寫入 |
If-Modified-Since If-Unmodified-Since If-Match If-None-Match x-ms-if-tags |
放置頁面 | 寫入 |
If-Modified-Since If-Unmodified-Since If-Match If-None-Match x-ms-if-tags |
從 URL 放置頁面 (2018-11-09 版和更新版本) |
寫入 |
If-Modified-Since If-Unmodified-Since If-Match If-None-Match x-ms-if-tags |
設定 Blob 中繼資料 | 寫入 |
If-Modified-Since If-Unmodified-Since If-Match If-None-Match x-ms-if-tags |
設定 Blob 屬性 | 寫入 |
If-Modified-Since If-Unmodified-Since If-Match If-None-Match x-ms-if-tags |
Set Container ACL (設定容器 ACL) | 寫入 |
If-Modified-Since If-Unmodified-Since |
設定容器元數據 | 寫入 | If-Modified-Since |
設定 Blob 標記 (2019-12-12 版和更新版本) |
寫入 | x-ms-if-tags |
Set Blob Tier | 寫入 | x-ms-if-tags |
快照 Blob | 讀取 |
If-Modified-Since If-Unmodified-Since If-Match If-None-Match x-ms-if-tags |
設定 Blob 不變性原則 | 寫入 | If-Unmodified-Since |
下面 Blob 服務資料作業目前不支援條件式標頭:
支援條件式標頭之作業的 HTTP 回應碼
如果要求包含條件式標頭,但要求的資源與指定的條件不相符,則 Blob 服務會傳回 HTTP 回應碼。 傳回的回應碼符合 HTTP/1.1 通訊協定規格 (RFC 2616)。
Azure .NET 用戶端連結庫中的方法會將這些錯誤響應碼轉換成 StorageException 物件。
讀取作業
下表指出當做業為讀取作業時,未符合每個條件式標頭的條件所傳回的回應碼。 讀取作業使用動詞命令 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 (先決條件失敗)) |
複製作業
下表指出當做業為複製作業時,未符合每個條件式標頭的條件所傳回的回應碼。 複製 Blob 作業會使用動詞 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 (先決條件失敗)) |
標記條件式作業
除了 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 (前置條件失敗) 作業。
呼叫端必須具有許可權,才能讀取 Blob 上的標記,才能使用 x-ms-if-tags
或 x-ms-source-if-tags
條件式標頭。
標記述詞語法
Blob 服務支持標頭值的 TagsPredicate
ANSI SQL WHERE 子句文集。 支援下列運算子:
運算子 | 描述 | 範例 |
---|---|---|
= |
等於 | 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 (10 個) 邏輯作業。
記憶體服務會拒絕包含無效表達式的任何要求,錯誤碼為 400 (錯誤要求) 。