IE cache緩衝 所帶來的問題收藏

來源:互聯網
上載者:User

曾經用struts的多語言功能寫了一些東西,用的是locale這個對象(怎麼做的就不講了,這裡不是想講struts)。
在本地測試沒有問題,中文英文切換都OK。放到遠程伺服器上自己試了也覺得ok。但之後不斷有人反映,有時候會很怪異的在英文的頁面環境下點選連結後,居然又回到了中文的頁面環境!我第一個反應肯定覺得是cache的問題。然後仔細檢查了一次所有jsp頁面的html <meta> tag,確保了所有的no cache和expire屬性都設好了。然後要求大家都把IE的檢查屬性設定到“每次檢查”。在自己機子上點擊了無數遍,中文英文反覆切換,似乎沒有問題了。但沒多久又有人投訴問題又出現了。
這裡要介紹一個工具叫做httpwatch,是一個IE嵌入式的工具,用來檢測IE的所有HTTP通訊的。沒有了這個工具,我很難找到問題所在(當然可能有大牛一早知道,但誰都要經曆不知道到知道的過程)。
jsp頁面是通過例如以下的link來調用struts action切換語言環境的,http://localhost/xxx/langAction.do?lang='zh'。但發現這條link被IE緩衝了,也就是說很多時候伺服器根本就沒有收到這個request。解決的辦法可以是在link後面加上一個random number或者timestamp,問題是很多這樣的link是hardcode到了flash裡面(修改flash的代碼? ),所以這種辦法行不通。有趣的是,如果這個action僅僅是修改了session裡面的locale屬性,而不通知front controller 去返回結果頁面給使用者的話(也就是 return null),這個是肯定會cache的。然而如果要返回一個頁面給使用者,這個cache的頻度會小很多。
最後推斷,問題出在了兩處地方。
1. IE的cache 也許是用url link + page result 來儲存和判斷是否應該使用cache,而不是真正發出request。在return null的那種情況,判斷的依據是url link + null。
2。在jsp頁面中,光是使用html的<meta> tag是無法禁止緩衝的。一定要加上
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
有人肯定會說,這個跟html的tag設定沒有不同啊。的確,我也覺得,但實踐證明,沒有這幾句,光靠html tag不行。
所以當action會返回頁面時,有以下這兩種情況:
a,返回的頁面沒有寫上上面的禁止cache的語句(或者唯寫了html tag)。IE儲存的是URL link + page result(cache eabled)。這也就是導致了之前為什麼還會有cache的原因
b,返回的頁面寫上了禁止cache語句 。IE儲存的是URL link + page result(cache disabled)。這樣才能夠實現到我們想要的目的。每次都會真正的發出request。
PS:IE的檢查設定一點都信不過,儘管調到最進階別,如果沒有上述措施,一樣會cache。而且,你總不能告訴全世界的使用者為了看你的網站去修改一下IE吧。(其他瀏覽器沒有實驗過)
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.