HTTP 快取到期計算機

輸入回應的 Cache-Control、Expires、Date 與 Age 值、接收的時間以及要檢查的時間。計算機會給出新鮮度存續時間、目前存續時間,以及該回應是否仍然新鮮。

快取類型
s
新鮮度判定(在要檢查的時間) —
新鮮度存續時間(回應可保持新鮮的時間長度;不會隨時間經過而改變)
新鮮度存續時間—
採用的來源—
目前存續時間(自回應產生起經過的時間;會隨時間經過而增加)
目前存續時間—
  表面存續時間(接收時間 − Date)—
  Age 標頭的值—
  接收時的存續時間(以上兩者中較大者)—
  自接收起經過的時間—
剩餘新鮮度
剩餘新鮮度(新鮮度存續時間 − 目前存續時間)—
變為過期的時間—

    這是依據 RFC 9111 的計算。實際的瀏覽器與 CDN 的行為不一定完全符合標準的描述。回應延遲視為 0。

    這個計算機的功能

    它涵蓋 HTTP 快取標準 RFC 9111 的一部分:新鮮度的計算。也就是決定已儲存的回應能否不經原始伺服器檢查就重複使用的部分。驗證(ETag、If-Modified-Since、304)、Vary 以及請求端的 Cache-Control 不在範圍內。

    新鮮度不是重新整理,也不是刪除

    回應過期(stale)只表示快取在未先檢查的情況下不可重複使用。這不表示瀏覽器畫面會自動重新整理,也不表示原始伺服器上的檔案已被更改或刪除。同樣地,回應仍然新鮮,也不表示伺服器上的檔案沒有變動。標準指出,Expires 標頭「does not imply that the original resource will change or cease to exist at, before, or after that time」。本計算機只計算快取副本的時間運算。

    新鮮度存續時間與目前存續時間

    由哪個值決定新鮮度存續時間

    依 RFC 9111 第 4.2.1 節,採用第一個符合的項目:

    順序 共用快取(CDN、代理伺服器) 私有快取(瀏覽器)
    1 s-maxage (不使用 s-maxage)
    2 max-age max-age
    3 Expires − Date Expires − Date
    4 若都不存在,則沒有明確的到期時間 相同

    目前存留時間的計算方式

    公式出自 RFC 9111 第 4.2.3 節:

    本計算機不會詢問送出請求的時間,因此將回應延遲(從送出請求到收到回應的時間)視為 0。 在延遲較大的連線上,計算出的存留時間可能小於實際值。標準也允許僅使用 Age 標頭加上延遲。

    輸入規則

    其他 Cache-Control 指令

    這些指令不用於計算,但會作為重複使用的注意事項顯示。

    範例

    輸入 結果
    max-age=3600,沒有 Age,收到後 1,800 秒 新鮮度有效期限 3,600 秒,目前存留時間 1,800 秒,剩餘 1,800 秒(新鮮)
    相同條件,剛好 3,600 秒時 目前存留時間 3,600 秒。與新鮮度有效期限相等,因此已過期
    max-age=3600,Age=600,剛收到 目前存留時間 600 秒,剩餘 3,000 秒
    共用快取,s-maxage=60,max-age=3600 新鮮度有效期限 60 秒(忽略 max-age)

    須知

    來源與查證

    以下內容已於 2026 年 11 月 1 日對照標準全文確認:

    本計算機僅就新鮮度依循上述章節。通過此計算並不代表任何產品或伺服器符合標準。

    常見問題

    max-age 與 Expires 同時存在時會如何?

    以 max-age 為優先,忽略 Expires(RFC 9111 第 5.3 節)。

    s-maxage 適用於瀏覽器嗎?

    s-maxage 是供共用快取使用的指令。私有快取(瀏覽器)不會使用它。

    什麼是 Age 標頭?

    這是途中某個快取所寫入的秒數,表示自回應在源頭伺服器產生或最後一次檢查以來經過的時間。本計算機用它來求得目前存留時間。

    過期的回應會自行消失或更新嗎?

    不會。過期只表示快取在重複使用前必須先檢查。它不會重新整理畫面,也不會改變源頭伺服器上的任何內容。

    如何確認時間?

    Unix 時間戳記換算器與 Cron 運算式計算機或許有幫助。