亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > .NET > 正文

ASP.NET MVC中使用jQuery時的瀏覽器緩存問題詳解

2024-07-10 13:30:59
字體:
來源:轉載
供稿:網友

介紹

盡管jQuery在瀏覽器ajax調用的時候對緩存提供了很好的支持,還是有必要了解一下如何高效地使用http協議。

首先要做的事情是在服務器端支持HTTP GET,定義不同的URL輸出不同的數據(MVC里對應的就是action)。如果要使用同一個地址獲取不同的數據,那就不對了,一個HTTP POST也不行因為POST不能被緩存。許多開發人員使用POST主要有2個原因:明確了數據不能被緩存,或者是避免JSON攻擊(JSON返回數組的時候可以被入侵)。

緩存解釋

jQuery全局對象里的ajax方法提供了一些options來支持緩存和Conditional GETs功能。

$.ajax({  ifModified: [true|false],  cache: [true|false],});

ifModified選項定義的是在ajax調用的時候是否支持Conditional GETs功能。jQuery會自動幫我們處理服務器端返回的名為Last-Modified的header值,然后在隨后的請求里的header里發送If-Modified-Since。這需要我們的MVC Controller要實現Conditional GETs功能才能用。Conditional GETs功能在http緩存上下文中用于重新驗證緩存中過期的條目。如果jQuery認為一個條目已經過期了,它首先會請求服務器使用Conditional GETs功能重新驗證該條目,如果服務器返回狀態碼304(Not modified),jQuery會重新使用緩存里的該項目,這樣的話,我們可以節約很多流量去下載頁面內容。

cache選項基本上是覆蓋服務器端返回的http header里的所有關于緩存的設置,如果設置cache選項為false的話,jQuery會在請求的URL后面附件一個時間戳,以便區分之前的URL地址,這樣沒錯請求的內容都是最新的,也就是說瀏覽器每次接收的都是新地址,自然返回的都是最新數據。

讓我們來看幾個場景:

服務器端響應里設置No-Cache

服務器端為王,如果服務器端明確定義了response響應不能被緩存的話,jQuery也無能為力。ajax里的cache選項將被忽略。

JS代碼:

$('#nocache').click(function () {  $.ajax({    url: '/Home/NoCache',    ifModified: false,    cache: true,    success: function (data, status, xhr) {      $('#content').html(data.count);    }  });});

C#代碼:

public ActionResult NoCache(){  // 禁用緩存  Response.Cache.SetCacheability(HttpCacheability.NoCache);  return Json(new { count = Count++ }, JsonRequestBehavior.AllowGet);}

服務器端響應里設置過期時間

服務器端設置過期時間用于緩存數據,該條目在客戶端將依據過期時間被緩存。

JS代碼:

$('#expires').click(function () {  $.ajax({    url: '/Home/Expires',    ifModified: false,    cache: true,    success: function (data, status, xhr) {      $('#content').html(data.count);    }  });});

C#代碼:

public ActionResult Expires(){  Response.Cache.SetExpires(DateTime.Now.AddSeconds(5));  return Json(new { count = Count++ }, JsonRequestBehavior.AllowGet);}

客戶端從來不緩存數據

客戶端決定每次都要最新的數據(不能使用緩存),也就是說ajaxi里的cache選項設置為false,不管服務器端如何定義,jQuery每次請求的URL地址都是唯一不同的,目的是每次都獲取最新的內容。

JS代碼:

$('#expires_nocache').click(function () {  $.ajax({    url: '/Home/Expires',    ifModified: false,    cache: false, // 這里是關鍵    success: function (data, status, xhr) {      $('#content').html(data.count);    }  });});

C#代碼:

public ActionResult Expires(){  // 不管服務器端怎么設置都沒用  Response.Cache.SetExpires(DateTime.Now.AddSeconds(5));  return Json(new { count = Count++ }, JsonRequestBehavior.AllowGet);}

服務器端和客戶端使用Conditional Gets功能驗證緩存數據

客戶端將條目放在緩存里,在過期之后重新驗證。服務器端必須實現Conditional GET功能(使用ETags或者last modified的header)。

JS代碼:

$('#expires_conditional').click(function () {  $.ajax({    url: '/Home/ExpiresWithConditional',    ifModified: true, // 這里是關鍵    cache: true,    success: function (data, status, xhr) {      $('#content').html(data.count);    }  });});

C#代碼:

public ActionResult ExpiresWithConditional(){  if (Request.Headers["If-Modified-Since"] != null && Count % 2 == 0)  {    return new HttpStatusCodeResult((int)HttpStatusCode.NotModified);  }  Response.Cache.SetExpires(DateTime.Now.AddSeconds(5));  Response.Cache.SetLastModified(DateTime.Now);  return Json(new { count = Count++ }, JsonRequestBehavior.AllowGet);}

上述MVC action中的代碼只是一個例子(非真實代碼),在真實的實現中,服務器端應該能夠知道數據自從上次響應以后是否被修改過。

總結

詳細通過這4個場景,大家應該了解了ajax請求的緩存技術了吧,我就不做總結了。

英文原文來自:http://weblogs.asp.net/cibrax/archive/2012/02/10/hacking-the-browser-cache-with-jquery-and-asp-net-mvc.aspx

以上這篇ASP.NET MVC中使用jQuery時的瀏覽器緩存問題詳解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到ASP.NET教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲在线免费视频| 国产精品精品视频一区二区三区| 成人免费视频a| 成人福利网站在线观看11| 日韩av免费在线看| 久久视频在线看| 国产精品高清免费在线观看| 国产精品入口夜色视频大尺度| 国产中文日韩欧美| 亚洲色无码播放| 日韩中文字幕在线视频播放| 精品久久久视频| 色www亚洲国产张柏芝| 欧美一区视频在线| 欧美人与性动交a欧美精品| 国产精品视频一| 亚洲一区二区三区乱码aⅴ| 欧美久久久精品| 国产一区二区三区视频免费| 日韩欧美在线视频日韩欧美在线视频| 欧美日韩午夜视频在线观看| 超碰91人人草人人干| 日韩一二三在线视频播| 亚洲欧美日韩精品| 国内伊人久久久久久网站视频| 久久久久久久久网站| 国产精品白嫩美女在线观看| 国产三级精品网站| 自拍偷拍免费精品| 日韩av日韩在线观看| 国产成+人+综合+亚洲欧洲| 91人成网站www| 2018日韩中文字幕| 日韩视频在线免费观看| 欧美大片在线免费观看| 国产成人精品视频| 精品国产户外野外| 一区二区三区亚洲| 久久久精品一区二区三区| 国产精品精品国产| 精品magnet| 欧美日韩一区二区在线| 欧美亚洲国产日本| 欧美性xxxx极品hd欧美风情| 欧美在线日韩在线| 欧美做爰性生交视频| 欧美日韩亚洲高清| 久久久伊人日本| 成人淫片在线看| 菠萝蜜影院一区二区免费| 精品一区二区亚洲| 欧美日韩人人澡狠狠躁视频| 国外色69视频在线观看| 亚洲男人的天堂在线播放| 91亚洲精品一区| 欧美在线国产精品| 亚洲欧美国产高清va在线播| 69**夜色精品国产69乱| 亚洲精品国偷自产在线99热| 狠狠躁夜夜躁人人爽超碰91| 国产精品丝袜视频| 久久久久国产精品免费网站| 色狠狠av一区二区三区香蕉蜜桃| 国产精品99蜜臀久久不卡二区| 欧美日韩国产一区中文午夜| 色偷偷偷亚洲综合网另类| 国产精品国内视频| 欧美精品国产精品日韩精品| 欧美激情国产日韩精品一区18| 91在线观看免费高清完整版在线观看| 欧美激情视频一区二区三区不卡| 国产精品自拍偷拍| 欧美亚洲伦理www| 2024亚洲男人天堂| 亚洲欧美综合精品久久成人| 久久久久九九九九| 亚洲韩国欧洲国产日产av| 欧美另类极品videosbest最新版本| 亚洲xxxx做受欧美| 成人福利视频在线观看| 亚洲欧洲偷拍精品| 78色国产精品| 一区二区三区 在线观看视| 欧美日本啪啪无遮挡网站| 欧美日韩国产精品一区| 亚洲天堂av在线免费| 亚洲欧洲在线播放| 成人网在线观看| 国产精品久久久久999| 97色伦亚洲国产| 亚洲最大福利网| 欧美中文在线视频| 91在线色戒在线| 久久亚洲精品一区| 欧美精品午夜视频| 久久99精品久久久久久噜噜| 国产欧美久久一区二区| 92福利视频午夜1000合集在线观看| 日本欧美在线视频| 亚洲天堂av在线免费观看| 日韩av最新在线观看| 亚洲欧洲在线免费| 欧美激情va永久在线播放| 亚洲在线免费看| 2024亚洲男人天堂| 黑人巨大精品欧美一区二区三区| 欧美亚洲国产日韩2020| 精品二区三区线观看| 欧美丰满少妇xxxx| 美女福利精品视频| 日本国产欧美一区二区三区| 国产精品美女久久久久久免费| 日韩av电影在线免费播放| 日韩av影片在线观看| 欧美激情视频一区二区| 国产一区二区三区在线免费观看| 日韩毛片中文字幕| 中文国产成人精品久久一| 日韩欧美999| 午夜精品久久久久久99热| 欧美日韩国产综合视频在线观看中文| 91免费视频国产| 91久久久在线| 国产精品户外野外| 成人久久久久久久| 中文字幕在线看视频国产欧美在线看完整| 92裸体在线视频网站| 国产精品久久久久久网站| 国产精品免费一区豆花| 欧美特级www| 成人精品视频99在线观看免费| 日韩精品电影网| 欧美性少妇18aaaa视频| 亚洲a中文字幕| 97色在线视频观看| 亚洲护士老师的毛茸茸最新章节| 亚洲欧洲av一区二区| 国产91精品在线播放| 国产精品久久网| 日韩免费在线免费观看| 亚洲专区在线视频| 国产精品伦子伦免费视频| 青青a在线精品免费观看| 久久精品久久久久久| 欧美插天视频在线播放| 国产精品三级久久久久久电影| 亚洲国产成人av在线| 欧美亚洲国产日韩2020| 欧美国产日本在线| 亚洲精品国产精品国产自| 久久久爽爽爽美女图片| 日韩av中文字幕在线| 日本精品久久电影| 中文字幕精品www乱入免费视频| 国产日韩欧美综合| 亚洲bt欧美bt日本bt| 91久久精品一区| 日韩有码在线播放| 久久99热这里只有精品国产| 久久视频精品在线| 国产91精品在线播放| 91天堂在线观看| 亚洲视频国产视频| 亚洲香蕉成视频在线观看|