解決HTTP數據不更新問題——no-cache在HTTP通信協議中的應用

轉貼請註明出處:http://blog.csdn.net/froole

HTTP服務器向客戶端返回的頭信息中可以包含Cache-Control:no-cache信息,意爲“數據內容不被儲存”。
很多WEB程序設計中,通常並不需要考慮這一點。但是,對相同URL的請求,並需要動態數據時,就需要程序員對服務器返回頭信息的進行修改。
例如,通過Ajax向同一個URL發送請求、頁面訪問同一個URL並需要動態顯示頁面內容。
在不對服務器所返回頭信息做任何修飾的情況下,
Cache-Control可能不被添加,此時,瀏覽器將緩存從服務器取得的信息。如果再次訪問網頁,瀏覽器會直接讀取緩存數據,而非訪問HTTP服務器,如果通過代理再次訪問網頁,那麼,代理服務器將會直接向瀏覽器返回一個302狀態,命令瀏覽器從緩存讀取數據。

本文想定開發人員遭遇以下兩種情況:
1.Ajax中,需要通過一個URL適時提取動態數據(例如,使用DWR提取某個POJO的數據);
2.在一個網頁中,通過對某個連接的重複訪問(發送請求),動態讀取不同的頁面數據(例如,根據某個項目的列排序)。

如 果可以在設計階段,就已經考慮到通過URL參數,改變URL,倒也不需要考慮緩存的問題。但是,如果URL相同,就會出現相應數據更新遲緩的現象。例如, 如果訪問速度相對較快,第一次訪問和第二次訪問的數據,在同一個客戶端是相同的。也就是HTTP數據不更新/更新遲緩現象。
解決此問題的方法,就是向服務器的返回頭信息“
Cache-Control:no-cache”。

PHP的情況,可以向相應的返回處理中添加以下代碼:

Java的情況,可以定義相應的URL,通過操作HttpServletResponse定義頭信息,如下:

以上兩個例子,雖然是在不同語言下的實現,但是從HTTP協議通信的角度,其效果是類似的。

使用Cache-Control需要注意的
通過控制Cache-Control頭信息,可以讓瀏覽器(代理服務器)及時更新請求數據。但是要注意的是,只有在HTTP1.1下才Cache-Control被支持。
當 然,HTTP的版本在大多數WEB開發中,同樣不需要考慮。而目前的主流瀏覽器也都是默認支持HTTP1.1。但是,如果使用IE6,並且通過代理服務器 訪問網站的時候,瀏覽器的HTTP請求就要變成HTTP1.0了。這個時候,Cache-Control就會失效,而且無法從服務器端控制HTTP協議版 本。只能通過瀏覽器的設定來解決,方法是,通過IE詳細設置中的HTTP1.1設定來解決。如果可能,也可以把目標服務器排除在代理目標之外。

<script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"></script>
轉貼請註明出處:http://blog.csdn.net/froole

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章