2011-03-07 127 views
0

對不起,這似乎與其他一些問題非常相似,但我已經查看了所有可以看到的相關帖子,但它們似乎沒有像我做;-)無法讓瀏覽器緩存內容

問題是,我無法獲得客戶端緩存的.js,.css和圖像從我的Apache2服務器上工作(我有兩個Ubuntu Apache/2.2.8和一個WAMP Apache在Windows下)。如果通過將Header Unset命令放入我的虛擬主機配置文件中,然後補充Caching指令(請參見下文)來關閉此功能,則可以使用默認設置,即可獲得良好的ETag風格的服務器主導緩存(304響應)它似乎並沒有被瀏覽器所尊重。

我可以看到使用Firebug瀏覽器知道一個緩存文件有效了幾個小時,但它仍然要求它。

任何有關如何調試的提示都會受到歡迎。

主機配置的相關部分如下所示:

<VirtualHost *:80> 
    DocumentRoot "C:/Projects/A2C/branches/CR7" 
    ServerName * 
    ServerAlias localhost ecomsvr0.dmclub.net 
    ErrorLog "c:\log\a2c.log" 
    CustomLog "c:\log\a2c-access.log" common 
    <Directory "c:\projects\A2C\branches\CR7"> 
     Options Indexes FollowSymLinks MultiViews 
     AllowOverride all 
     Order allow,deny 
     Allow from all 
    ExpiresDefault A36000 
    Header Set Cache-Control "max-age=7200" 
    Header Unset Etag 
    Header Unset Last-Modified 
    </Directory> 
</VirtualHost> 

回答

1

什麼打動我的是,你不發送任何驗證(最後-Modified或ETag)。雖然它們不是強制性的,但我強烈建議您發送一個,以使瀏覽器能夠執行條件請求。 RFC 2616表示「只要可行,HTTP/1.1服務器應該發送Last-Modified」。這不一定是你問題的根源,但它可能是。

因此,我建議刪除行「標題未設置最後修改」並再次檢查。

請注意,您的過期時間爲訪問時間加上36000s,而您的最大年齡時間爲7200s,這是沒有意義的。理解新的緩存控制指令的瀏覽器(所有新瀏覽器都會這樣做)將用於最大化年齡。

如果添加Last-Modified不起作用,您可以發佈您的服務器發送的完整響應標題嗎?例如,請轉至http://redbot.org/並針對您的服務器運行此檢查器併發布結果。這將進一步幫助識別您的問題。

+0

我故意刪除Last-Modified/ETag,因爲我不想要條件請求 - 它們比擁有(比如說)1小時緩存更昂貴。理想情況下,我們都有,但我明白他們不能很好地協作(我想這是由於他們的獨立性)。不過,我會嘗試redbot的東西。乾杯。 – user648498 2011-03-08 09:16:10

+0

剛剛嘗試過redbot,發現Firebug向我展示了完全相同的響應。該URL是http://ecom0.edge5.dmclub.net/test/integration/ajl/cachetest.html,我的願望是獲得簡單的客戶端緩存沒有條件請求(我們試圖減少延遲) – user648498 2011-03-08 09:23:38

+0

謝謝發佈該網址。現在我的FF緩存響應並從緩存中提供,而不需要重新驗證。標題包括兩個驗證器現在(我假設你已經改變了配置)。有條件的請求:當資源不再新鮮時,它們僅由瀏覽器發送,但仍在緩存中。所以你不應該通過增加一個驗證器來放棄任何東西。如果您的後端無法使用HTTP/304(未修改)響應條件請求,則只需返回一個正常的200響應。 – alienhard 2011-03-08 13:44:57