MVC中使用jquery的浏览器缓存问题

jquery在浏览器ajax调用的时候,对缓存提供了很好的支持,POST方式不能被缓存,
使用POST的原因,明确了数据不能被缓存,或者避免JSON攻击(JSON返回数据的时候可以被入侵)

jquery全局对象里的ajax提供了一些方式来支持缓存和ConditionalGETs功能

  $.ajax({
        ifModified:true,
        cache:true,
    });

ifModified选项定义的是在ajax调用的时候是否支持Conditional GETs功能,jquery会自动处理服务端返回的名为Last-Modified的header值,
它首先会请求服务器使用ConditionalGETs功能重新验证该条目,如果服务器返回状态码304,jquery会重新使用缓存里的该条目,
cache选项:如果为false,jquery会在请求的url后面附加一个时间戳,以区分之前的url地址,这样每次请求是新的,请求的数据肯定也是新的

但是如果服务器明确定义了Response响应不能被缓存的话,jquery也没用,ajax里面的cache选项被忽略,服务器里的禁用缓存如下:

  // 禁用缓存
   Response.Cache.SetCacheability(HttpCacheability.NoCache);

服务器和客户端使用Conditional Gets功能验证缓存数据
客户端将条目放在缓存里,在过期之后重新验证,服务器端必须实现Conditional Gets功能(使用ETags或者last modified的header

js代码

  $.ajax({
        ifModified:true,//这是关键
        cache: true,
        success: function (data,status,xhr) {

        }
    });

服务器代码:

  if (Request.Headers["If-Modified-Since"] != null  )
            {
                return new HttpStatusCodeResult((int)HttpStatusCode.NotModified);
            }
时间: 2024-08-02 22:48:40

MVC中使用jquery的浏览器缓存问题的相关文章

asp.net mvc中使用jquery H5省市县三级地区选择控件

地区选择是项目开发中常用的操作,本文讲的控件是在手机端使用的选择控件,不仅可以用于实现地区选择,只要是3个级别的选择都可以实现,比如专业选择.行业选择.职位选择等.效果如下图所示: 附:本实例asp.net mvc中使用jquery H5省市县三级地区选择控件及中国省市县标准地区库下载地址 咨询QQ:806693619 一.实现原理 一般常用输入控件是input,当点击input的时候执行jquery获取焦点事情,然后弹出本地区选择插件,选择完地区后点击确定将选择的值返回给input完成地区输入

ASP.NET MVC中使用jQuery时的浏览器缓存问题

介绍 虽然jQuery在浏览器ajax调用的时候对缓存提供了非常好的支持,还是有必要了解一下怎样高效地使用http协议. 首先要做的事情是在server端支持HTTP GET,定义不同的URL输出不同的数据(MVC里相应的就是action). 假设要使用同一个地址获取不同的数据,那就不正确了.一个HTTP POST也不行由于POST不能被缓存.很多开发者使用POST主要有2个原因:明白了数据不能被缓存,或者是避免JSON攻击(JSON返回数组的时候能够被入侵). 缓存解释 jQuery全局对象里

MVC 中引入Jquery文件的几种方法

方法1: <script src="@Url.Content("~/Scripts/jquery-1.9.1.js")" type="text/javascript"></script> @Url.Content可以获取到项目的绝对路径,将jquery-1.9.1.js文件放入到Scripts文件夹下,即可以在cshtml中引用jquery了. 方法2: <script src="../../Scripts

在ASP.NET MVC中使用jQuery的Load方法加载静态页面的一个注意点

使用使用jQuery的Load方法可以加载静态页面,本篇就在ASP.NET MVC下实现. Model先行: public class Article { public int Id { get; set; } public string Url { get; set; } } 在HomeController中的Index方法,向视图传递一个Article强类型. public class HomeController : Controller { public ActionResult Ind

MVC中使用jquery uploadify上传图片报302错误

使用jquery uploadify上传图片报302错误研究了半天,发现我上传的action中有根据session判断用户是否登录,如果没有登录就跳到登陆页,所以就出现了302跳转错误.原来更新了flash的版本以后,通过uploadify获取不到session的值.我目前的解决办法是: Global.asax.cs中: /// <summary> /// 解决uploadif上传无法获取Cookie的情况 /// </summary> /// <param name=&qu

记录:asp.net mvc 中 使用 jquery 实现html5 实现placeholder 密码框 提示兼容password IE6

@{ViewBag.Title = "完美结合";} <script>var G_start_time = new Date;</script> <!--[if (lt IE 8.0)]><link type="text/css" rel="stylesheet" href="@Url.Content("~/Content/login/css/index.src_datauri.css

那些年,我们用的浏览器缓存

常用到的缓存有:浏览器缓存,DNS缓存,服务器缓存.总结下前端优化中常用到的浏览器缓存. expires和cache-control用于本地缓存,Last-Modified和Etag用于协商缓存. expires是http1.0定义的,是一个具体的日期时间,使用时,需要服务器和PC同步,cache-control是http1.1定义的,是一个相对时间,相对时间就不必要求时钟同步了.cache-control的max-age是一个秒数,若与expires同时存在,则cache-control生效.

host缓存,浏览器缓存---解决host缓存带来的伤

1.缓存 缓存,对应工程师来讲简直太熟悉了,太方便了,省略到资源或数据的获取方式,直接缓存到离用户访问最快的地方,也降低服务器的压力,比如: (1)静态文件获取 服务器->cdn->本地磁盘->本地内存 (2)数据获取 数据库->内存型数据库 (3)host 缓存 主域名服务器->顶级域名服务器->根域名服务器->网络服务提供商缓存->路由器缓存->系统缓存->浏览器缓存 缓存的好处不言而喻,提升用户的访问速度,降低服务端的压力,问题就是:多份数

jQuery中ajax的使用与缓存问题的解决方法

jQuery中ajax的使用与缓存问题的解决方法 1:GET访问 浏览器 认为 是等幂的就是 一个相同的URL 只有一个结果[相同是指 整个URL字符串完全匹配]所以 第二次访问的时候 如果 URL字符串没变化 浏览器是 直接拿出了第一次访问的结果 POST则 认为是一个 变动性 访问 (浏览器 认为 POST的提交 必定是 有改变的) 防止 GET 的 等幂 访问 就在URL后面加上 ?+new Date();,[总之就是使每次访问的URL字符串不一样的] 设计WEB页面的时候 也应该遵守这个