[ADP-149] If-Unmodified-Since
reviewing phase 1
應提及在 If-None-Match 被處理時忽略 If-Unmodified-Since
概述
If-Unmodified-Since
HTTP 請求標頭用於進行條件請求,允許客戶端僅在資源自指定日期以來未被修改的情況下發送請求。
指導原則
- API 設計者應該(SHOULD)考慮在 PUT 和 DELETE 請求中為可修改資源實現對
If-Unmodified-Since
標頭的支持。 - 伺服器必須(MUST)比較
If-Unmodified-Since
標頭中的日期與請求資源的最後修改日期。 - 如果資源自指定日期以來已被修改,伺服器必須(MUST)返回 412 (Precondition Failed) 狀態碼。
- 如果資源自指定日期以來未被修改,伺服器必須(MUST)執行請求並返回相應的狀態碼。
- 客戶端應該(SHOULD)在請求可能已被修改的資源時包含
If-Unmodified-Since
標頭。 - DRAFT 根據需求,如果實作
If-Unmodified-Since
時,應該(SHOULD)在文件中標記為必需或可選。- 標記為必需時,應(SHOULD)拒絕不帶有 If-Unmodified-Since 的請求。
使用方法
If-Unmodified-Since
標頭通常用於 PUT 或 DELETE 請求。客戶端在請求中包含帶有日期值的此標頭,伺服器將此日期與請求資源的最後修改日期進行比較。
格式
http
If-Unmodified-Since: <星期名>, <日> <月> <年> <時>:<分>:<秒> GMT
例如
http
If-Unmodified-Since: Wed, 21 Oct 2015 07:28:00 GMT
伺服器行為
當伺服器收到帶有 If-Unmodified-Since
標頭的請求時:
如果資源自指定日期以來已被修改:
- 伺服器應回應 412 (Precondition Failed) 狀態碼。
- 回應主體應為空。
如果資源自指定日期以來未被修改:
- 伺服器應執行請求並返回相應的狀態碼。
示例
請求
http
PUT /example.json HTTP/1.1
Host: api.example.com
If-Unmodified-Since: Wed, 21 Oct 2015 07:28:00 GMT
Content-Type: application/json
{
"example": "更新的內容"
}
回應 (已修改)
http
HTTP/1.1 412 Precondition Failed
Date: Thu, 22 Oct 2015 08:30:00 GMT
回應 (未修改)
http
HTTP/1.1 200 OK
Date: Thu, 22 Oct 2015 08:30:00 GMT
Content-Type: application/json
{
"example": "更新的內容"
}
相關 ADPs
Last-Modified
: 回應標頭,指示資源最後修改的時間。ETag
: 回應標頭,為資源的特定版本提供唯一標識符。If-None-Match
: 請求標頭,與ETag
一起用於條件請求。- ADP-148: Cache-Control