国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 軟件教程 > 正文

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

2020-07-13 14:05:23
字體:
來源:轉載
供稿:網友
轉貼請注明出處: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的情況,可以向相應的返回處理中添加以下代碼:
header("Cache-Control: no-cache");
header("Cache-Control: no-cache");
Java的情況,可以定義相應的URL,通過操作HttpServletResponse定義頭信息,如下:

public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
((HttpServletResponse) response).setHeader("Cache-Control", "no-cache");
chain.doFilter(request, response);
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
((HttpServletResponse) response).setHeader("Cache-Control", "no-cache");
chain.doFilter(request, response);
}
以上兩個例子,雖然是在不同語言下的實現,但是從HTTP協議通信的角度,其效果是類似的。
使用Cache-Control需要注意的
通過控制Cache-Control頭信息,可以讓瀏覽器(代理服務器)及時更新請求數據。但是要注意的是,只有在HTTP1.1下才Cache-Control被支持。
當然,HTTP的版本在大多數WEB開發中,同樣不需要考慮。而目前的主流瀏覽器也都是默認支持HTTP1.1。但是,如果使用IE6,并且通過代理服務器訪問網站的時候,瀏覽器的HTTP請求就要變成HTTP1.0了。這個時候,Cache-Control就會失效,而且無法從服務器端控制HTTP協議版本。只能通過瀏覽器的設定來解決,方法是,通過IE詳細設置中的HTTP1.1設定來解決。如果可能,也可以把目標服務器排除在代理目標之外。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 锦州市| 广河县| 耿马| 萍乡市| 定结县| 平南县| 池州市| 万全县| 曲麻莱县| 竹溪县| 天柱县| 仪陇县| 东方市| 信阳市| 乡宁县| 富顺县| 建宁县| 鄯善县| 岱山县| 正安县| 娱乐| 梅河口市| 施秉县| 黄梅县| 淮阳县| 泉州市| 天祝| 天柱县| 磐安县| 静海县| 察雅县| 古丈县| 石家庄市| 酒泉市| 阜南县| 长岭县| 清远市| 汝城县| 永平县| 镇安县| 西平县|