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

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

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

每次更改了css文件就把參數(shù)time的值設(shè)為更改當(dāng)日的日期,這樣本地IE就會(huì)把它當(dāng)作一個(gè)新的文件更新一次。

但是在最近做的項(xiàng)目中發(fā)現(xiàn)一個(gè)比較奇怪的問題,服務(wù)器端做了gzip壓縮,到客戶端第一次解壓的時(shí)候沒問題,第二次訪問的時(shí)候ie從cache里讀文件就出問題了,只能讀出前面大約一兩千個(gè)字節(jié)。在兩臺(tái)win2000+ie6的機(jī)子上重現(xiàn)了這個(gè)問題,XP的還沒有發(fā)現(xiàn)。

最終的解決方案是在時(shí)間戳參數(shù)后面再加上一個(gè).css結(jié)尾,也就是這么寫:

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

然后就一切正常了...

大概IE在從緩存里讀文件的時(shí)候還得對文件擴(kuò)展名做一個(gè)判斷,所以這么加一下它就認(rèn)了。我自己對這個(gè)解釋不甚滿意,所以如果你有標(biāo)準(zhǔn)答案麻煩留個(gè)言

BTW,這個(gè)現(xiàn)象在.js文件上同樣重現(xiàn)了。