Skip to content
ADP
API Design PrincipleBETA

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

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

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

    • 伺服器應執行請求並返回相應的狀態碼。

示例

請求

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

參考資料