• 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);
                }
  • 相关阅读:
    【转载】 K2 blackpearl 中的业务规则(Rules)
    【转载】工作流模式与K2实现(2)
    7.10学习内容。 J
    第三章 J
    C博客作业01分支、顺序结构
    C语言博客作业循环结构
    我的C语言第一篇博客!
    使用NDK创建及配置C++程序(原生纯C++项目,不包含JAVA代码)
    关于工作中的错误
    【博文翻译】Building Boost with NDK R5
  • 原文地址:https://www.cnblogs.com/niuzaihenmang/p/5642934.html
Copyright © 2020-2023  润新知