If-None-Match

If-None-Match HTTP 請求頭使請求成為條件請求。對於 GETHEAD 方法,伺服器將僅當它沒有與給定 ETag 相匹配的 ETag 時,才返回請求的資源,並使用 200 狀態。對於其他方法,只有當最終存在的資源的 ETag 與列出的任何值都不匹配時,才會處理該請求。

當條件對於 GETHEAD 方法失敗時,伺服器必須返回 HTTP 狀態碼 304(未修改)。對於應用伺服器端更改的方法,將使用狀態碼 412(前提條件失敗)。請注意,生成 304 響應的伺服器必須生成以下任何一個將出現在對相同請求的 200(OK)響應中的標題欄位:Cache-Control、Content-Location、Date、ETag、Expires 和 Vary。

與儲存的 ETag 的比較使用的是弱比較演算法,這意味著如果內容等效,則兩個檔案被認為是相同的 - 它們不必在位元組上完全相同。例如,在頁尾中建立日期不同的兩個頁面仍將被視為相同。

當與 If-Modified-Since 結合使用時,If-None-Match 優先(如果伺服器支援)。

有兩個常見的用例

  • 對於 GETHEAD 方法,更新具有關聯的 ETag 的快取實體。
  • 對於其他方法,特別是對於 PUTIf-None-Match* 值一起使用可以用於儲存不存在的檔案,保證在另一個上傳發生之前不會丟失之前 put 的資料;這個問題是 丟失更新問題 的一個變體。
標題型別 請求頭
禁止的標題名稱

語法

http
If-None-Match: "<etag_value>"
If-None-Match: "<etag_value>", "<etag_value>", …
If-None-Match: *

指令

<etag_value>

唯一地表示請求資源的實體標籤。它們是放置在雙引號之間的 ASCII 字串(如 "675af34563dc-tr34"),並且可能以 W/ 為字首來指示應該使用弱比較演算法(對於 If-None-Match 來說這是無用的,因為它只使用該演算法)。

*

星號是一個特殊的值,表示任何資源。它們只在上傳資源時有用,通常與 PUT 一起使用,以檢查之前是否已上傳具有相同標識的另一個資源。

示例

http
If-None-Match: "bfc13a64729c4290ef5b2c2730249c88ca92d82d"

If-None-Match: W/"67ab43", "54ed21", "7892dd"

If-None-Match: *

規範

規範
HTTP 語義
# field.if-none-match

瀏覽器相容性

BCD 表格只在瀏覽器中載入

另請參閱