共用方式為


為 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 版本開始, Get BlobGet Blob Properties 操作支援多個條件標頭。 你可以指定任何支援的條件標頭組合。 Blob 服務會根據以下表達式來評估這些條件:

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

你也可以為 和 If-None-Match提供多個逗號分隔值If-Match。 如果你為 指定多個值, If-MatchBlob 服務會在評估整個表達式前,對所有提供的值執行邏輯 OR 操作。 如果你為 設定多個值, if-None-Match服務會在評估整個表達式前執行邏輯 AND 操作。 不支援為 和 If-Unmodified-Since 指定多個值If-Modified-Since,會導致錯誤代碼 400(Bad Request)。

此功能啟用是為了符合 HTTP/1.1 規範。 它也適用於內容傳遞網路(CDN)或代理伺服器在飛行中請求中加入額外條件標頭的情況。 以下範例說明了多種不同的條件標頭組合。

範例 1:

考慮一個包含 If-Match and If-Modified-Since 標頭的 Get 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-SinceIf-MatchIf-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(未修改)

範例四:

考慮一個包含 If-Modified-SinceIf-None-MatchIf-Unmodified-SinceIf-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 之前的版本中指定讀取操作的條件標頭,以及所有版本的寫入操作

在呼叫 2013-08-15 之前版本的 Blob 服務讀取操作(Get BlobGet Blob Properties)時,以及呼叫任何寫入操作(不論版本),請注意以下幾點:

  • 若請求同時指定 與If-None-MatchIf-Modified-Since標頭,則依據 中If-None-Match指定的條件評估請求。

  • 若請求同時指定 與If-MatchIf-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-未修改-因為

如果匹配

如果無匹配

x-ms-if-標籤
從網址附加封鎖

(版本為2018-11-09及之後)
書寫 If-modified-Since

If-未修改-因為

如果匹配

如果無匹配

x-ms-if-標籤
複製 Blob 讀取和寫入 對於目標斑點的條件:

- If-modified-Since

- If-未修改-因為

- 如果匹配

- 如果無匹配

- x-ms-if-標籤

對於源斑點的條件:

- x-ms-來源-如果-修改-since

- x-ms-來源-if-unmodified-since

- x-ms-來源-if-match。

- x-ms-來源-if-none-匹配

- x-ms-來源-if-tags
刪除 Blob 書寫 If-modified-Since

If-未修改-因為

如果匹配

如果無匹配

x-ms-if-標籤
刪除容器 書寫 If-modified-Since

If-未修改-因為
抓布洛布 參閱 If-modified-Since

If-未修改-因為

如果匹配

如果無匹配

x-ms-if-標籤
取得 Blob 中繼資料 參閱 If-modified-Since

If-未修改-因為

如果匹配

如果無匹配

x-ms-if-標籤
取得 Blob 屬性 參閱 If-modified-Since

If-未修改-因為

如果匹配

如果無匹配

x-ms-if-標籤
取得 Blob 標籤

參閱 x-ms-if-tags (版本 2019-12-12 及以後)

關於 blob 的條件(版本 2025-11-05 及以後):

- x-ms-blob-if-modified-since

- x-ms-blob-if-未修改-因為

- x-ms-blob-if-匹配

- x-ms-blob-if-none-match(不匹配)
取得封鎖清單 參閱 x-ms-if-標籤
取得頁面範圍 參閱 If-modified-Since

If-未修改-因為

如果匹配

如果無匹配

x-ms-if-標籤
租用 Blob 書寫 If-modified-Since

If-未修改-因為

如果匹配

如果無匹配

x-ms-if-標籤
租用容器 書寫 If-modified-Since

If-未修改-因為
從網址輸入 blob 書寫 If-modified-Since

If-未修改-因為

如果匹配

如果無匹配

對於源斑點的條件:

- x-ms-來源-如果-修改-自從

- x-ms-來源-if-未修改-自從

- x-ms-來源-如果匹配

- x-ms-來源-如果-無匹配

Put Blob \(英文\) 書寫 If-modified-Since

If-未修改-因為

如果匹配

如果無匹配

x-ms-if-標籤
設定從網址封鎖

(版本為 2018-03-28 及以後)
書寫 x-ms-來源-如果-修改-自從

x-ms-來源-如果-未修改-自從

x-ms-來源-如果匹配

x-ms-來源-如果-無匹配
放置封鎖清單 書寫 If-modified-Since

If-未修改-因為

如果匹配

如果無匹配

x-ms-if-標籤
放置頁面 書寫 If-modified-Since

If-未修改-因為

如果匹配

如果無匹配

x-ms-if-標籤
從網址輸入頁面

(版本為2018-11-09及之後)
書寫 If-modified-Since

If-未修改-因為

如果匹配

如果無匹配

x-ms-if-標籤
設定 Blob 中繼資料 書寫 If-modified-Since

If-未修改-因為

如果匹配

如果無匹配

x-ms-if-標籤
Set Blob Properties \(英文\) 書寫 If-modified-Since

If-未修改-因為

如果匹配

如果無匹配

x-ms-if-標籤
Set Container ACL (設定容器 ACL) 書寫 If-modified-Since

If-未修改-因為
Set Container Metadata 書寫 If-modified-Since
設定 Blob 標籤

書寫 x-ms-if-tags (版本 2019-12-12 及以後)

關於 blob 的條件(版本 2025-11-05 及以後):

- x-ms-blob-if-modified-since

- x-ms-blob-if-未修改-因為

- x-ms-blob-if-匹配

- x-ms-blob-if-none-match(不匹配)
設定 Blob 級別 書寫 x-ms-if-標籤
快照方塊 參閱 If-modified-Since

If-未修改-因為

如果匹配

如果無匹配

x-ms-if-標籤
設定 blob 不可變性政策 書寫 If-未修改-因為

以下 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 及更新版本。 只適用於複製黏液。 TagsPredicate 值。 指定此標頭僅在謂詞對來源 blob 標籤值為 時 true 執行操作。

x-ms-if-tags 請求中出現 或 x-ms-source-if-tags 條件標頭,且 評估 TagsPredicatefalse,Blob 服務會回傳錯誤代碼 412(前置條件失敗)。

呼叫者必須有權限讀取 blob 上的標籤,才能使用 x-ms-if-tags or x-ms-source-if-tags 條件標頭。

標籤 謂詞語法

Blob 服務支援 ANSI SQL WHERE 子集,用於標頭值 TagsPredicate 。 支援下列運算子:

Operator Description Example
= 平等 Status = 'In Progress'
<> 不相等 Status <> 'Done'
> 大於 LastModified > '2018-06-18 20:51:26Z'
>= 大於或等於 Priority >= '05'
< 小於 Age < '032'
<= 小於或等於 Reviewer <= 'Smith'
AND 邏輯和 Name > 'C' AND Name < 'D'
Age > '032' AND Age < '100'
OR 邏輯或 Status = 'Done' or LastModified > '2018-06-18 20:51:26Z'

所有標籤值皆為字串,且支援的二元關聯運算子使用字典序排序標籤值。 為支援非字串資料型態,包括數字與日期,必須採用適當的填充與可排序格式。 標籤值必須以單引號包圍。

如果標籤名稱是一般的 SQL 識別碼,它們可能會存在但不會逃脫。 若包含特殊字元,必須用雙引號分隔,例如 "TagName" = 'TagValue'

表達式可能包含多個標籤名稱與值的比較。 括號(())可用來分組邏輯表達式並控制典型的操作順序。 A TagsPredicate 最多包含 10 個邏輯運算。

儲存服務會拒絕任何包含錯誤代碼 400(錯誤請求)的無效表達式的請求。

另請參閱

Blob 服務概念