It seems something is wrong with IE's cache and GZip

好多Linux + Apache的服務器都會對CSS、JS和圖片這些靜態的內容設置緩存,到了IE這里又會在本地做一個緩存。所以當我們更新了CSS文件之后,常常會出現客戶端沒有更新,導致顯示出現問題。之前我一直使用時間戳參數的方法來解決:

<link rel="stylesheet" type="text/css" 
href="common.css?time=20060408" />

每次更改了css文件就把參數time的值設為更改當日的日期,這樣本地IE就會把它當作一個新的文件更新一次。

但是在最近做的項目中發現一個比較奇怪的問題,服務器端做了gzip壓縮,到客戶端第一次解壓的時候沒問題,第二次訪問的時候ie從cache里讀文件就出問題了,只能讀出前面大約一兩千個字節。在兩臺win2000+ie6的機子上重現了這個問題,XP的還沒有發現。

最終的解決方案是在時間戳參數后面再加上一個.css結尾,也就是這么寫:

<link rel="stylesheet" type="text/css" 
href="common.css?time=20060408.css" />

然后就一切正常了...

大概IE在從緩存里讀文件的時候還得對文件擴展名做一個判斷,所以這么加一下它就認了。我自己對這個解釋不甚滿意,所以如果你有標準答案麻煩留個言

BTW,這個現象在.js文件上同樣重現了。