2010-11-04 86 views
6

我有一個系統,其中緩存max-age設置爲0,並有問題,當我在我的style.css中做了一些更改失敗更改不apear到客戶端。瀏覽器將使用css的舊緩存版本。 我有一個簡單的問題:命名爲style.css?123的css文件將被緩存爲新的?Css文件緩存

+0

你使用IIS服務器還是Apache? – 2010-11-04 10:03:25

回答

15

是的,向資源的URI添加唯一的查詢字符串將強制客戶端獲取「新鮮」版本(因爲客戶端不知道它僅僅是一個更新以前的緩存資源)。這被稱爲指紋並且您通常使用CSS文件的時間戳或遞​​增版本號。

Google Web Fundamentals在HTTP cache optimization上有一篇很棒的文章。尤其是標題爲「無效和更新緩存的響應:」

你如何獲得兩全其美的:客戶端緩存和快速更新?您可以更改資源的URL,並強制用戶在其內容更改時下載新的響應。通常,您可以通過在其文件名中嵌入文件的指紋或版本號(例如,樣式)來執行此操作。 x234dff .css。

請注意,指紋不需要是序列號。任何價值 - 散列,版本等 - 只要碰撞風險有限,就會這樣做。


1)這是怎麼在這裏做了SO,例如http://sstatic.net/js/global-login.js?v=12

+0

顯然,使用查詢字符串參數是不好的。請參閱http://stackoverflow.com/a/13377291/637609 – 2012-11-14 10:56:01

+0

你能否更新緩存優化鏈接? – shankbond 2016-09-29 11:08:19

+0

@shankbond完成。 – jensgram 2016-10-02 17:52:16

0

是的,在每個style.css文件中追加查詢字符串參數將強制它再次緩存。
,因爲瀏覽器會將每個靜態組件與其url進行緩存,所以當url更改時,新文件將被緩存。

+0

顯然,使用查詢字符串參數是不好的。請參閱http://stackoverflow.com/a/13377291/637609 – 2012-11-14 10:56:57

0

你就可以欺騙瀏覽器以爲它是一個新的樣式表,每一秒的時戳你的CSS:

<link rel="stylesheet" type="text/css" href="style.css?<?php echo date('l jS \of F Y h:i:s A'); ?>" /> 

,這將給你這樣的:

<link rel="stylesheet" type="text/css" href="style.css?Thursday 24th of April 2008 04:45:21 PM" /> 

來自Can We Prevent CSS Caching?

+0

顯然,使用查詢字符串參數是不好的。請參閱http:// stackoverflow。com/a/13377291/637609 – 2012-11-14 10:57:31

1

您可以附加一個唯一的查詢字符串,雖然這會使用帶寬。

可以重命名每次做出改變時你的CSS文件,IE:

主v1.css 主v2.css 主v3.css

,然後重新引用它在你的網頁中。這節省了帶寬並迫使瀏覽器重新加載它。

+0

'main.css?v1'如何使用比'main-v1.css'更多的帶寬? (我想我誤解了你的答案。) – jensgram 2010-11-04 10:19:15

+0

main.css?v1實際上是相同的,我的意思是用於日期標記,它會每一次加載它,當你只有在需要加載時纔會加載它。每次更改都以不同方式命名css文件,或者添加版本號查詢字符串是2種最佳方式。 – 2010-11-04 10:34:59

+0

顯然,使用查詢字符串參數是不好的。請參閱http://stackoverflow.com/a/13377291/637609 – 2012-11-14 10:58:56