銷售: 1-800-867-1380

指定 Blob 服務作業的條件式標頭

更新日期: 2014年11月

有幾項 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 (REST 應用程式開發介面) 以及 取得 Blob 屬性 (REST 應用程式開發介面) 作業支援多個條件式標頭。您可以指定支援之條件式標頭的任何組合。Blob 服務會根據下列運算式評估這些條件:

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

您也可以為 If-MatchIf-None-Match 提供多個逗號分隔值。如果您為 If-Match 指定多個值,則 Blob 服務會在評估整個運算式之前,先對所有提供的值執行邏輯 OR 作業。如果您為 if-None-Match 指定多個值,則服務會在評估整個運算式之前,先執行邏輯 AND 作業。不支援為 If-Modified-SinceIf-Unmodified-Since 指定多個值,且會產生錯誤碼 400 (Bad Request)。

可啟用這項功能以符合 HTTP/1.1 規格,並滿足內容傳遞網路 (CDN) 或 Proxy 伺服器新增其他條件式標頭至傳遞要求的情況。以下為一些條件式標頭的不同組合範例。

範例 1:

請考慮包含 If-MatchIf-Modified-Since 標頭的 取得 Blob (REST 應用程式開發介面) 要求。下表指出個別評估標頭的結果,以及利用組合評估標頭的結果。

 

條件式標頭 個別評估的結果 利用組合評估的結果

If-Match

412 (先決條件失敗)

412 (先決條件失敗)

If-Modified-Since

200 (確定)

If-Match

412 (先決條件失敗)

412 (先決條件失敗)

If-Modified-Since

304 (未修改)

If-Match

200 (確定)

200 (確定)

If-Modified-Since

200 (確定)

If-Match

200 (確定)

304 (未修改)

If-Modified-Since

304 (未修改)

範例 2:

請考慮包含 If-None-MatchIf-Modified-Since 標頭的要求。

 

條件式標頭 個別評估的結果 利用組合評估的結果

If-None-Match

304 (未修改)

200 (確定)

If-Modified-Since

200 (確定)

If-None-Match

200 (確定)

200 (確定)

If-Modified-Since

200 (確定)

If-None-Match

200 (確定)

200 (確定)

If-Modified-Since

304 (未修改)

If-None-Match

304 (未修改)

304 (未修改)

If-Modified-Since

304 (未修改)

範例 3:

請考慮包含 If-Modified-SinceIf-MatchIf-Unmodified-Since 標頭的要求。

 

條件式標頭 個別評估的結果 利用組合評估的結果

If-Modified-Since

200 (確定)

412 (先決條件失敗)

If-Match

412 (先決條件失敗)

If-Unmodified-Since

200 (確定)

If-Modified-Since

200 (確定)

412 (先決條件失敗)

If-Match

200 (確定)

If-Unmodified-Since

412 (先決條件失敗)

If-Modified-Since

304 (未修改)

412 (先決條件失敗)

If-Match

200 (確定)

If-Unmodified-Since

412 (先決條件失敗)

If-Modified-Since

304 (未修改)

304 (未修改)

If-Match

200 (確定)

If-Unmodified-Since

200 (確定)

範例 4:

請考慮包含 If-Modified-SinceIf-None-MatchIf-Unmodified-SinceIf-Match 標頭的要求。

 

合併 個別 HTTP 狀態碼 取得 Blob 狀態結果

If-Modified-Since

200 (確定)

200 (確定)

If-None-Match

200 (確定)

If-Unmodified-Since

200 (確定)

If-Match

200 (確定)

If-Modified-Since

200 (確定)

412 (先決條件失敗)

If-None-Match

304 (未修改)

If-Unmodified-Since

412 (先決條件失敗)

If-Match

200 (確定)

If-Modified-Since

200 (確定)

200 (確定)

If-None-Match

304 (未修改)

If-Unmodified-Since

200 (確定)

If-Match

200 (確定)

If-Modified-Since

304 (未修改)

412 (先決條件失敗)

If-None-Match

200 (確定)

If-Unmodified-Since

200 (確定)

If-Match

412 (先決條件失敗)

If-Modified-Since

304 (未修改)

412 (先決條件失敗)

If-None-Match

200 (確定)

If-Unmodified-Since

412 (先決條件失敗)

If-Match

412 (先決條件失敗)

If-Modified-Since

304 (未修改)

200 (確定)

If-None-Match

200 (確定)

If-Unmodified-Since

200 (確定)

If-Match

200 (確定)

If-Modified-Since

304 (未修改)

412 (先決條件失敗)

If-None-Match

304 (未修改)

If-Unmodified-Since

412 (先決條件失敗)

If-Match

200 (確定)

透過 2013-08-15 版之前的版本呼叫 Blob 服務讀取作業 (取得 Blob (REST 應用程式開發介面)取得 Blob 屬性 (REST 應用程式開發介面)),透過任何版本呼叫任何寫入作業時,請謹記以下事項:

  • 如果要求同時指定 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 作業

作業類型

支援的條件式標頭

複製 Blob

讀取和寫入

目的地 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 (REST 應用程式開發介面)

寫入

If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

刪除容器 (REST 應用程式開發介面)

寫入

If-Modified-Since

If-Unmodified-Since

取得 Blob (REST 應用程式開發介面)

讀取

If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

取得 Blob 中繼資料 (REST 應用程式開發介面)

讀取

If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

取得 Blob 屬性 (REST 應用程式開發介面)

讀取

If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

取得分頁範圍 (REST 應用程式開發介面)

寫入

If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

租用 Blob (REST 應用程式開發介面)

寫入

If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

租用容器 (REST 應用程式開發介面)

寫入

If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

放置 Blob (REST 應用程式開發介面)

寫入

If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

放置區塊清單 (REST 應用程式開發介面)

寫入

If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

放置分頁 (REST 應用程式開發介面)

寫入

If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

設定 Blob 中繼資料 (REST 應用程式開發介面)

寫入

If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

設定 Blob 屬性 (REST 應用程式開發介面)

寫入

If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

設定容器 ACL

寫入

If-Modified-Since

If-Unmodified-Since

設定容器中繼資料 (REST 應用程式開發介面)

寫入

If-Modified-Since

快照集 Blob

讀取

If-Modified-Since

If-Unmodified-Since

If-Match

If-None-Match

下面 Blob 服務資料作業目前不支援條件式標頭:

如果要求包含條件式標頭,但要求的資源與指定的條件不相符,則 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 (先決條件失敗))

另請參閱

本文對您有任何幫助嗎?
(剩餘 1500 個字元)
感謝您提供意見
顯示:
© 2015 Microsoft