簡體   English   中英

同時使用“ Expires:0”,“ no-cache”,“ no-store”,“ max-age = 0,必須重新驗證”-做什么用?

[英]Simultaneous use of “Expires: 0”, “no-cache”, “no-store”, “max-age=0, must-revalidate” - what for?

最近,我發現我們的網絡應用發送了以下標頭:

    Expires: 0
    Cache-Control: no-cache, no-store, max-age=0, must-revalidate

這是我的閱讀方式:

    Expires: 0

“嘿,瀏覽器,您剛剛獲得的資源已經過期”

    Cache-Control: [..] max-age=0 [..]

“實際上沒關系我剛才所說的,請執行以下操作:”

    no-cache

“請緩存此資源。但是它已經過時,因此請在使用前重新驗證它”

    no-store

“也請不要緩存任何內容”

    max-age=0, must-revalidate

“還請緩存此資源。但是,如果您想在0秒后使用它,請重新驗證它。”

對此有2種解釋:

  • 寫它的人不知道他們在做什么
  • 他們實際上非常了解。 即,他們迎合了一些極端情況下的瀏覽器行為/錯誤/我所缺少的東西。

他們到底想避免什么?

獎勵問題1:我的理解是否正確,即Expires: 0相當於( no-cache警告,但no-cache警告)而不是no-store嗎? 即,它允許緩存,但是緩存立即變得陳舊-它不會阻止緩存?

獎勵問題2:我不應該添加proxy-revalidate嗎?

緩存是HTTP協議的可選功能,它是在RFC 7234中定義的。 Cache-Control標頭用於為請求/響應鏈中的緩存指定指令。

根據Mozilla的MDN Web文檔 ,您可以使用以下Cache-Control指令關閉HTTP / 1.1中的緩存:

Cache-Control: no-cache, no-store, must-revalidate

使用上面的Cache-Control指令時,將max-age指令設置為0無關緊要(但不會造成傷害)。


如果收件人不支持Cache-Control可能還需要添加一個設為0Expires標頭。 RFC 7234

如果響應中包含帶有max-age指令的Cache-Control字段,則接收者必須忽略Expires字段。 同樣,如果響應中包含s-maxage指令,則共享緩存接收者務必忽略Expires字段。 在這兩種情況下, Expires的值僅適用於尚未實現Cache-Control字段的收件人。


proxy-revalidate指令的工作方式與must-revalidate相同,但僅適用於共享緩存(例如代理)。 也就是說,緩存必須在使用之前驗證過時資源的狀態,並且不應使用過期的資源。


我發現這篇關於Google進行HTTP緩存的文章非常有見地。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM