2016-05-23 56 views
1

Section 4 of RFC 7234已經存儲的應答具有本段:的Invalidate與Last-Modified頭

當存儲一個以上的合適的響應,高速緩衝存儲器必須使用 最近響應(如由Date頭字段來確定)。它也可以用「Cache-Control:max-age = 0」或 「Cache-Control:no-cache」轉發請求以區分使用哪個響應。

它提到關於已經存儲的響應與DateCache-Control頭失效。

什麼是Last-Modified標題?我可以將它用於相同的目的嗎?

+0

你問哪個問題:「*符合RFC 7234?*」或「*現有緩存是否實現了這個?*」? –

+0

@VasiliyFaronov第二個,實際上。我只想知道我是否可以使用這個頭來使這些響應無效。 – Lewis

+0

獲取HTTP緩存(特別是用戶代理緩存)並不是一件容易的事,可以存儲幾個適合於相同請求的新鮮響應。這也不是「無效」。你確定你沒有把事情與其他事情混淆嗎?更詳細地解釋你的情況可能是一個好主意。 –

回答

1

Last-Modified作爲驗證者。這些在前面你引述的部分中提到:

當一個請求提出,緩存不得重複使用存儲的響應,除非[...]所存儲的響應可以是:

  • 新鮮(見4.2節),或
  • 允許服務於舊的(參見4.2.4節),或
  • 成功驗證(見4.3節)。

Section 4.3解釋了驗證的細節。我認爲4.3.2是必須的您感興趣的:

[A]包含If-Modified-Since頭字段請求中指出,客戶希望通過修改日期來驗證一個或多個它自己的存儲響應。緩存接收者應當產生一個304(未修改)響應(使用所選擇的存儲的響應的元數據),如果滿足下列情況之一是真實的:

  1. 所選存儲響應具有Last-Modified場值,該值是早於或等於條件時間戳的 ;
  2. Last-Modified字段存在於選定的存儲響應中,但它的Date字段值早於或等於條件時間戳;或者,
  3. 既不Last-Modified也不存在於選定的存儲的響應,但緩存記錄它已被接收的時間早於或等於條件時間戳。

所以是的,它完全符合RFC的要求。由於Last-Modified/If-Modified-Since是早在HTTP/1.0中引入的一種相當古老的機制,因此您可以期望緩存符合要求。

+0

這個問題似乎是關於選擇幾個新鮮的回覆之一,這不涉及重新驗證。但是,這個問題很可能會被問到。 –

+0

@VasiliyFaronov嗯,你其實是對的。 'Last-Modified'不會影響新鮮度,只會使用具有If-Modified-Since'但沒有'If-None-Match'標頭的請求。 – DaSourcerer

+0

感謝您的回答。順便說一句,我其實不明白第二段。根據我的理解,請求必須包含'If-Modified-Since'頭,以便通過'Last-Modified'頭進行驗證。當一個新文件可用時,這個動作是否真的迫使瀏覽器覆蓋舊文件?僅僅因爲請求並不總是包含'If-Modified-Since'頭字段。 – Lewis