2010-07-21 43 views
0

據說Web服務器的時鐘必須相同才能使ExpiresCache-Control標頭正常工作?這是爲什麼?他們不能關閉1秒鐘或幾分鐘嗎?如果其中一個Web服務器的時鐘稍微偏離,將會緩存嗎?

如果緩存應該是1年有效,那麼幾分鐘甚至幾個小時的時間差就不會在一臺或某些網絡服務器上出現問題?

documentation有人說:

請注意,爲了這個[緩存]到 工作,所有的應用程序服務器 必須返回相同的時間戳。這 意味着他們必須有他們的時鐘 同步。如果其中一個漂移 不同步,則會隨機看到不同的 時間戳,並且緩存 將不起作用。在那種情況下,瀏覽器 將要求相同的資產超過 ,甚至認爲他們沒有 更改。您可以使用類似 的Live HTTP Headers for Firefox至 驗證緩存確實是 的工作。

回答

0

如果你在你所有的主機上運行ntpd(而你是,不是嗎?)它們會更加接近。它與標題的關係不如緩存控制器在URL的末尾生成?1232285206。這只是一個Unix紀元時間(自1970年1月1日00:00:00以來的秒數),因此在幾秒鐘內應該可以正常緩存可以緩存的內容。 ntpd通常保持四分之一秒或更小的容差。 (在對多個時間服務器進行的一系列ntpdate測試中,我的電腦從未超過0.15秒。)

+0

如果它是一個像'1232285206'這樣的數字,那麼不應該每一秒都重要嗎? (因爲'?1232285206'和'?1232285207'將會創建不同的URL),即使它精確到秒,也不會出現像一個控制器運行時的情況,時間爲12:03.999997,並且另一臺機器,控制器運行在12:04.000001,因此他們是「關閉」一秒(如果數字被截斷(通過math.floor)) – 2010-07-21 02:02:24

+0

當然,但機會是好的,你的資產不會多次改變一秒 - 他們只需要正確的處理請求。當你改變你的資產時,陳舊的資產可能會被分派幾乎整整一秒。如果你無法容忍一秒鐘的陳舊時間,那麼緩存你的資產並不是一個好主意。但是大多數網站可以處理一秒鐘過時的緩存對象。如果服務器上的時鐘已經關閉了十秒鐘,那麼您可能會發出11秒的陳舊數據。但是,真的,只需運行ntpd,並開心。 :) – sarnold 2010-07-21 02:32:06

+0

感謝您的回答。你的意思是大多數網站可以「處理」一秒過期的緩存對象?是不是瀏覽器決定是否重新加載一些東西?你可以用特定的術語來說明......爲什麼Web服務器不關心幾秒鐘的差異,什麼機制在工作,什麼是極限(10秒?15?) – 2010-07-21 02:51:00

0

請注意,這是Rails特有的,只有在您有多個Web服務器提供數據的情況下。

鑑於高速緩存使用時間戳存儲數據,如果服務器在時間戳記上有所不同,緩存將始終在其中一個(具有'較早'時間戳的緩存)上失效,因爲它總是會認爲該文件最近已經更新,因此將請求視爲緩存未命中。

+0

是否由於另一個標頭?因爲如果它只是'Expires'和'Cache-Control',那麼略微關閉的時間應該不重要。那麼你的意思是時鐘必須精確到秒?如果一臺機器在幾個小時後甚至1小時後可以關閉一秒鐘會怎麼樣?那麼所有機器必須每半小時同步一次? – 2010-07-21 00:51:47

+0

這是由於應用程序將返回新的或不新的數據。請記住,代碼是根據是否認爲資產已更新而發送標頭的。我必須重申,這是Rails特有的,而不是瀏覽器緩存的屬性(在下面的答案中的一些評論讓我懷疑你知道這一點) – 2010-07-21 06:17:30