麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > .NET > 正文

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

2024-07-10 13:30:59
字體:
供稿:網(wǎng)友

介紹

盡管jQuery在瀏覽器ajax調(diào)用的時(shí)候?qū)彺嫣峁┝撕芎玫闹С郑€是有必要了解一下如何高效地使用http協(xié)議。

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

緩存解釋

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

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

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

cache選項(xiàng)基本上是覆蓋服務(wù)器端返回的http header里的所有關(guān)于緩存的設(shè)置,如果設(shè)置cache選項(xiàng)為false的話,jQuery會(huì)在請求的URL后面附件一個(gè)時(shí)間戳,以便區(qū)分之前的URL地址,這樣沒錯(cuò)請求的內(nèi)容都是最新的,也就是說瀏覽器每次接收的都是新地址,自然返回的都是最新數(shù)據(jù)。

讓我們來看幾個(gè)場景:

服務(wù)器端響應(yīng)里設(shè)置No-Cache

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

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);}

服務(wù)器端響應(yīng)里設(shè)置過期時(shí)間

服務(wù)器端設(shè)置過期時(shí)間用于緩存數(shù)據(jù),該條目在客戶端將依據(jù)過期時(shí)間被緩存。

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);}

客戶端從來不緩存數(shù)據(jù)

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

JS代碼:

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

C#代碼:

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

服務(wù)器端和客戶端使用Conditional Gets功能驗(yàn)證緩存數(shù)據(jù)

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

JS代碼:

$('#expires_conditional').click(function () {  $.ajax({    url: '/Home/ExpiresWithConditional',    ifModified: true, // 這里是關(guān)鍵    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中的代碼只是一個(gè)例子(非真實(shí)代碼),在真實(shí)的實(shí)現(xiàn)中,服務(wù)器端應(yīng)該能夠知道數(shù)據(jù)自從上次響應(yīng)以后是否被修改過。

總結(jié)

詳細(xì)通過這4個(gè)場景,大家應(yīng)該了解了ajax請求的緩存技術(shù)了吧,我就不做總結(jié)了。

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

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


注:相關(guān)教程知識(shí)閱讀請移步到ASP.NET教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 久久超碰99 | www成人在线观看 | 一区二区久久精品66国产精品 | 91精品国产成人 | 黄视频网站免费在线观看 | 免费看污视频在线观看 | 日本精品网 | 性明星video另类hd | 久国久产久精永久网页 | 国产精品午夜一区 | 久久av一区二区 | 日韩欧美激情视频 | 国产一级爱c视频 | 免费观看高清视频网站 | 逼片 | 中文字幕在线播放一区 | 全黄性性激高免费视频 | 欧美极品欧美精品欧美视频 | 欧美激情视频一区二区免费 | 日韩视频在线观看免费 | 国产毛片网 | 视频在线亚洲 | 在线播放黄色片 | 毛片在线免费观看网址 | 2021国产精品| 欧美日本在线视频 | 98色视频| 欧美成人性生活 | 伦理三区| 黄色毛片一级 | 男女一边摸一边做羞羞视频免费 | 亚洲极色 | 伊人久操视频 | 天天草夜夜骑 | 欧美精品久久久久久久久老牛影院 | 钻石午夜影院 | 亚洲精品成人av在线 | chinese18 xxxx videos| 日本在线观看视频网站 | 精品国产91久久久久久久妲己 | 久久福利电影网 |