Skip to content
ADP
API Design PrincipleBETA

[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 標頭的請求時:

  1. 如果資源自指定日期以來未被修改:

    • 伺服器應回應 304 (Not Modified) 狀態碼。
    • 回應主體應為空。
  2. 如果資源自指定日期以來已被修改:

    • 伺服器應回應 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

參考資料