如何使瀏覽器緩存資源(如圖像),並使用命令告訴瀏覽器不要檢查更新的文件?我擁有永遠不會改變的靜態資產,不斷要求服務器進行更新是一種浪費。apache緩存控制無需驗證
0
A
回答
1
我的主人不聲明favicon.ico的文件,圖像/ X-圖標,所以我需要以下
AddType image/x-icon .ico
您設置到期如下,每種類型之一。下面是一個例子集(您可以使用天,周,月等。
ExpiresActive On
ExpiresByType text/css "access plus 1 month"
ExpiresByType text/javascript "access plus 1 month"
ExpiresByType image/gif "access plus 1 week"
ExpiresByType image/png "access plus 1 week"
ExpiresByType image/x-icon "access plus 1 week"
您可能還希望設置緩存頭
<FilesMatch "\.(css|js|gif|jpe?g|png|ico)$">
Header add "Cache-Control" "public, max-age=604800"
</FilesMatch>
所需的其他類型的擴展604800 = 1周秒。如果你想改變這個你算算。
瀏覽器如何使用這些頭
RFC 2616 (HTTP/1.1)規定了何時以及如何b的框架建議羅爾斯使用這些信息。要深入瞭解實際情況,請使用Google Chrome開發者視圖(Ctl + Shft + I)網絡標籤。 (儘管可能通過擴展包,但大多數其他主流瀏覽器都提供相同的工具。)但是,這是建議性的,用戶可以選擇忽略此選項,但它們總是選擇檢查服務器,或者每個會話檢查一次服務器。 IIRC,一些早期的瀏覽器(例如MSIE 8)每次會話都有一次檢查作爲默認選項。
此外,如果你選擇做一個刷新頁面,那麼大多數瀏覽器將重新驗證在頁面上使用的所有資源如果-Modified-Since的和如果 - 無 - 匹配,所以你需要重新鏈接或重新輸入URI以查看正常重用操作。同樣,大多數人會將Shift +刷新視爲「強制刷新」 - 即不進行協商。
當我管理OpenOffice.orf用戶論壇時,我曾經分析過整個月份的訪問日誌,看看有多少緩存是通過使用簡單的算法來確定何時重用資源應該被緩存,但仍然被客戶端瀏覽器。我驚訝地發現這個緩存未命中率超過了30%(由於用戶的瀏覽器設置)。然而,大多數用戶使用谷歌作爲知識庫訪問這些用戶論壇,詢問具體問題,然後查看幾頁,從不在本月內返回。當我將自己限制在主持人的IP(主要使用Ff或Chrome作爲他們的瀏覽器)時,此速率提高到〜95%。
因此,客戶端瀏覽器做使用此信息,但沒有你所期望的那麼多。我還討論了here,當你沒有明確請求這個時,瀏覽器也可以緩存資源。
相關問題
- 1. URL重寫和緩存控制apache htaccess
- 2. 緩存控制:必須重新驗證是否需要驗證所有請求,或只是過時的?
- 3. 光油4不尊重緩存控制:必須重新驗證
- 4. mvc:控制特定的需要驗證
- 5. 驗證歸因緩存
- 6. http身份驗證緩存
- 7. HTTP緩存控制
- 8. 緩存控制頭
- 9. Ajax緩存控制
- 10. JavaScript驗證控制
- 11. HTTP緩存控制:無到期日
- 12. HTTP/1.1緩存控制無緩存問題
- 13. 它是如何必要的是使用「必須重新驗證」中的「緩存控制:無緩存,必重新驗證」
- 14. 用Apache控制緩存的正確方法是什麼?
- 15. 在Apache服務器上使用.htaccess實現緩存控制
- 16. 緩存控制私人
- 17. 緩存用戶控制
- 18. 緩存控制問題
- 19. 關於緩存控制
- 20. Tomcat中的緩存控制
- 21. 控制緩存過期
- 22. 使用jQuery控制緩存
- 23. 控制瀏覽器緩存
- 24. 控制緩存在asp.net
- 25. 緩存控制HTML標題
- 26. 雙緩存控制線
- 27. 緩存控制器響應
- 28. 緩存控制C#ASP.NET
- 29. 如何控制CSS緩存?
- 30. 驗證控制器問題
我知道如何緩存。我想告訴服務器甚至不要檢查更新的版本。 – LordZardeck 2012-03-11 04:41:20
@LordZardeck,你的願望是不合邏輯的。 mod_expires在文件上執行'lstat()'。鑑於這是它將要讀取的文件,這與已經在文件系統緩存中緩存的inode的lstat相當。這花費幾百微秒。如果沒有兌現,讀取本身可能需要100毫秒或更多。您無法使用mod_expires將來設置絕對日期。當然,您可以放下標題並讓瀏覽器執行cond'l GET。解決這個問題! ; - ? – TerryE 2012-03-11 05:13:49
此外,如果你想「服務器甚至不檢查」,然後改變你的問題。你說「告訴*瀏覽器* ...「順便說一句,」訪問加1個月「意味着瀏覽器在重新驗證之前將在下個月使用本地緩存副本。如果您不喜歡,那麼將」access + 10 years「或其他相同的東西放在一起。 – TerryE 2012-03-11 05:18:42