2012-03-16 39 views
30

我們一直在使用Chrome緩存Glassfish服務器上的資源時遇到問題。不會發送expires和no-cache標頭,Chrome會緩存資源(大約4 MB SWF文件) - 儘管存在Last-Modified標頭。如果過期和/或沒有緩存標頭未設置,Google Chrome會緩存資源多久?

有時Chrome將獲得304碼,其他時候它只是做了200(從高速緩存)。我知道304 - Chrome可能會檢查最新的最新修改日期和緩存版本來決定。但有些時候它會執行200(來自緩存),它不會返回任何標題信息,並顯示Chrome只是假設文件沒有被修改而不是檢查。

Google's own site states以下:

HTTP/S支持由瀏覽器靜態資源的本地緩存。最新的瀏覽器的一些 (如IE 7,Google Chrome)使用啓發式算法來確定 多久緩存沒有顯式緩存 頭的所有資源。

但是,這並沒有提供一個明確的答案。這種啓發式發佈在哪裏?我意識到可能沒有固定的答案(比如30天),但是一些通用的指導方針會很有用。此外,如果設置了Last-Modified,我不明白爲什麼Chrome不會首先檢查它。

+2

它已發佈至Chrome源代碼可免費使用。 – cdeszaq 2012-03-16 16:19:21

+0

嗨 - 您是否發現關於如何確定啓發式的更多信息?如果邏輯確實基於DEFAULT_CACHE_TIME,那麼顯示此設置的Chrome URI是否存在? – andrew 2013-06-29 00:50:50

回答

9

DEFAULT_CACHE_TIME = 300

我發現上面通過http://code.google.com/p/chromium/source/search?q=DEFAULT_CACHE_TIME&origq=DEFAULT_CACHE_TIME&btnG=Search+Trunk爲 「DEFAULT_CACHE_TIME」 搜索。

有一個名爲包含DEFAULT_CACHE_TIME「chromeextensionsdocs.py」文件。

相信這是基於在http://code.google.com/appengine/docs/python/memcache/overview.html
在「chromeextensionsdocs.py」給出的例子秒,DEFAULT_CACHE_TIME在memcache.add

發送作爲最後PARAM我不能完全肯定,如果這是正確的價值或不是,但似乎可能是將這些拼湊在一起。

+0

我對這個主題沒有任何特別的知識,除了在線閱讀一些文章外。 'DEFAULT_CACHE_TIME'可能是內存緩存的默認值,但[據稱Chrome有幾個緩存,其中一個是基於磁盤的](http://gent.ilcore.com/2011/02/chromes-10-caches.html )。我想象一個文件將在5分鐘後在內存緩存中過期,但它可能會在磁盤緩存中保存更長時間。 [本文](http://blogs.msdn.com/b/ie/archive/2010/07/14/caching-improvements-in-internet-explorer-9.aspx)提供了有關IE9確定緩存時間的方式的深入見解無政策文件到期。 – 2013-03-25 07:26:18

+4

「300」的單位是天嗎?小時 ?秒? – Raptor 2014-12-16 15:05:01

+0

查看答案 - 「我相信這是基於...秒的秒數」 – 2014-12-16 15:42:04

-1
+0

-1;您引用的是2014年正式廢棄的RFC(如鏈接頁面頂部所示),但它無論如何都不回答問題。 – 2018-01-03 23:15:25

2

瀏覽器認爲一個緩存響應新的通常是相對於當它是最後修改時間:

由於原始服務器並不總是提供明確的到期時間,高速緩存MAY如果未指定顯式時間,則使用啓發式過期時間,並使用使用其他標頭字段值(例如最後修改時間)的算法...如果響應具有Last-Modified標頭字段([RFC7232]的第2.2節) ),鼓勵緩存使用啓發式過期值,該值不超過自那時起的一小部分時間間隔。這個分數的典型設置可能是10%。 [https://tools.ietf.org/html/rfc7234#section-4.2.2]

的瀏覽器(和其他瀏覽器)如何計算該值的細節,可以在源代碼(An example from Chrome v49)中找到。看來Chrome也會計算相對於Last-Modified標題的值。

Credit to this post

+0

如果沒有Last-Modified標頭,該怎麼辦? – Phil 2017-01-25 10:22:19

+0

這取決於我認爲的瀏覽器。我從Chrome中注意到的代碼示例落在'max_age_value'和Expires標題上,我認爲... – Jon 2017-01-26 23:39:10