校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > ASP.NET MVC中使用jQuery時的瀏覽器緩存問題詳解

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

熱門標(biāo)簽:400電話辦理怎么樣 蘇州如何辦理400電話 西寧呼叫中心外呼系統(tǒng)線路商 百應(yīng)電話機器人外呼系統(tǒng) 聯(lián)通官網(wǎng)400電話辦理 臨沂智能電話機器人加盟 地圖標(biāo)注軟件免費下載 網(wǎng)絡(luò)電話外呼系統(tǒng)上海 外呼電話機器人成本

介紹

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

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

緩存解釋

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

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

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

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

讓我們來看幾個場景:

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

服務(wù)器端為王,如果服務(wù)器端明確定義了response響應(yīng)不能被緩存的話,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);
}

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

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

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選項設(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功能驗證緩存數(shù)據(jù)

客戶端將條目放在緩存里,在過期之后重新驗證。服務(wù)器端必須實現(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中的代碼只是一個例子(非真實代碼),在真實的實現(xiàn)中,服務(wù)器端應(yīng)該能夠知道數(shù)據(jù)自從上次響應(yīng)以后是否被修改過。

總結(jié)

詳細通過這4個場景,大家應(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時的瀏覽器緩存問題詳解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • ASP.NET Core緩存靜態(tài)資源示例詳解
  • 詳解ASP.NET Core 中間件之壓縮、緩存
  • Asp.Net中MVC緩存詳解
  • asp.net性能優(yōu)化之使用Redis緩存(入門)
  • ASP.NET下使用xml反序列化、緩存依賴實現(xiàn)個性化配置文件的實時生效
  • ASP.NET頁面緩存常見的4種方式
  • 詳解Asp.Net Core 2.1+的視圖緩存(響應(yīng)緩存)

標(biāo)簽:慶陽 聊城 臨夏 海西 清遠 中衛(wèi) 甘肅

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《ASP.NET MVC中使用jQuery時的瀏覽器緩存問題詳解》,本文關(guān)鍵詞  ASP.NET,MVC,中,使用,jQuery,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《ASP.NET MVC中使用jQuery時的瀏覽器緩存問題詳解》相關(guān)的同類信息!
  • 本頁收集關(guān)于ASP.NET MVC中使用jQuery時的瀏覽器緩存問題詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 师宗县| 和平区| 四子王旗| 武宣县| 方城县| 华池县| 彭泽县| 祁阳县| 南川市| 明水县| 兰溪市| 迭部县| 班玛县| 云梦县| 延边| 乐昌市| 那坡县| 望奎县| 襄城县| 同心县| 屏东县| 双辽市| 辽中县| 安达市| 定远县| 苍山县| 青岛市| 肃北| 从江县| 化州市| 安岳县| 彩票| 新丰县| 巴塘县| 句容市| 临湘市| 浪卡子县| 彭州市| 余庆县| 义马市| 清水河县|