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

Posted 那就让我这样吧

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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);
            }

 

以上是关于MVC中使用jquery的浏览器缓存问题的主要内容,如果未能解决你的问题,请参考以下文章

十条实用的jQuery代码片段

Swift新async/await并发中利用Task防止指定代码片段执行的数据竞争(Data Race)问题

Swift新async/await并发中利用Task防止指定代码片段执行的数据竞争(Data Race)问题

如何在 MVC Zend 中的 jquery 中显示图像

十条jQuery代码片段助力Web开发效率提升

十条jQuery代码片段助力Web开发效率提升