[ADP-132] If-Modified-Since
reviewing phase 1
Should mention ignoring If-Modified-Since if If-None-Match is addressed
概述
If-Modified-Since
HTTP 請求標頭用於進行條件請求,允許伺服器僅在請求的資源自指定日期以來已被修改的情況下發送回應。
指導原則
- API 設計者應該(SHOULD)在 GET 和 HEAD 請求中為可快取資源實現對
If-Modified-Since
標頭的支持。 - 伺服器必須(MUST)比較
If-Modified-Since
標頭中的日期與請求資源的最後修改日期。 - 如果資源自指定日期以來未被修改,伺服器必須(MUST)返回 304 (Not Modified) 狀態碼。
- 如果資源自指定日期以來已被修改,伺服器必須(MUST)返回 200 (OK) 狀態碼並附上更新後的資源。
- 客戶端應該(SHOULD)在請求可能已被快取的資源時包含
If-Modified-Since
標頭。 - 實施者應該(SHOULD)將
If-Modified-Since
標頭與其他快取機制(如 ETags)結合使用,以實現更強大的快取策略。
使用方法
If-Modified-Since
標頭通常用於 GET 或 HEAD 請求。客戶端在請求中包含帶有日期值的此標頭,伺服器將此日期與請求資源的最後修改日期進行比較。
格式
http
If-Modified-Since: <星期名>, <日> <月> <年> <時>:<分>:<秒> GMT
例如
http
If-Modified-Since: Wed, 21 Oct 2015 07:28:00 GMT
伺服器行為
當伺服器收到帶有 If-Modified-Since
標頭的請求時:
如果資源自指定日期以來未被修改:
- 伺服器應回應 304 (Not Modified) 狀態碼。
- 回應主體應為空。
如果資源自指定日期以來已被修改:
- 伺服器應回應 200 (OK) 狀態碼。
- 回應應在主體中包含更新後的資源。
示例
請求
http
GET /example.json HTTP/1.1
Host: api.example.com
If-Modified-Since: Wed, 21 Oct 2015 07:28:00 GMT
回應 (未修改)
http
HTTP/1.1 304 Not Modified
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
Last-Modified: Thu, 22 Oct 2015 08:00:00 GMT
{
"example": "更新後的內容"
}
相關 ADPs
Last-Modified
: 回應標頭,指示資源最後修改的時間。ETag
: 回應標頭,為資源的特定版本提供唯一標識符。If-None-Match
: 請求標頭,與ETag
一起用於條件請求。- ADP-131: Cache-Control