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