2010-03-16 34 views
1

我正在實現一種自定義Web服務器。我正在考慮添加一個Expires標題支持。但是,我有點不確定如何實現它。「Expires」HTTP標頭是否需要跨多個冷高速緩存請求保持一致?

如果正在對服務器上相同的未更改資源進行多個冷高速緩存請求,並且服務器返回了不同的Expires標頭(例如,它使用相對時間來計算Expires日期的確切值,例如距請求的+6小時時間),這是否也會使所有代理服務器上的緩存無效?還是不可能發生(根據規範)?

Expires HTTP標頭需要跨多個冷高速緩存請求保持一致嗎?

回答

0

好吧,沒關係,發現下的HTTP Spec

基本上Cache Revalidation and Reload Controls節的相關信息,你可以成爲你想要的所有不同的驗證,但你必須明白,在這種情況下,代理可以從他們自己的緩存和來自與代理進行通信的各種用戶代理中獲得一組不同的驗證器。他們可能會選擇向您發送一個,這可能不是最終用戶的正確或最優的一個。但是,規範中提出了「最佳方法」。

我想這應該包括Expires標題以及ETags,Cache-Control和whatnot。


這裏的相關摘錄,如果任何人的興趣:

當中間緩存是被迫的, 由最大年齡= 0指令的手段, 重新驗證自己的緩存項,和 客戶端在請求中提供了自己的 驗證程序,所提供的 驗證程序可能與當前與 高速緩存條目一起存儲的驗證程序 不同。在這種情況下,高速緩存 可以使用驗證程序在使其 自己的請求不會影響語義 透明度。不過,驗證器的選擇可能會影響性能。 最好的方法是讓 中間緩存在發出請求時使用自己的 驗證程序。如果 服務器回覆304(不是 修改),那麼緩存可以將其現在驗證的副本返回 到具有200(OK)響應的客戶端 。如果 服務器與一個新的實體和 緩存驗證回覆,然而, 中間緩存可以比較使用強比較功能一個 在客戶端的請求提供, 的 返回驗證。 如果客戶端的驗證程序等於原始服務器的 ,則中間緩存中的 只會返回304 (未修改)。否則,它將返回 具有200(OK) 響應的新實體。如果一個請求包含 no-cache指令,它不應該包含最小新鮮,最大陳舊或最大年齡爲 的 。