【问题标题】:IE9 caching dynamic pagesIE9缓存动态页面
【发布时间】:2011-08-24 01:49:00
【问题描述】:

我正在开发一个动态 Web 应用程序(在 IIS7 上运行),它在所有主流浏览器中都能正常工作,除了 IE9。看起来,它几乎缓存了所有东西,这会导致很多问题,比如

  • 经常变化的内容保持不变
  • 用户访问授权内容,然后退出,然后尝试返回受保护的内容并从缓存中获取!

我试过用

禁用缓存
<meta http-equiv="Expires" CONTENT="0">
<meta http-equiv="Cache-Control" CONTENT="no-cache">
<meta http-equiv="Pragma" CONTENT="no-cache">

但到目前为止还没有运气......

【问题讨论】:

    标签: asp.net caching internet-explorer-9


    【解决方案1】:

    我刚刚在 MVC 开发中遇到过这个问题。

    我想禁用所有 AJAX 请求服务器端的缓存。

    为此,我注册了以下全局过滤器。

    public class AjaxCacheControlAttribute:  ActionFilterAttribute
    {
        public override void OnResultExecuted(ResultExecutedContext filterContext)
        {
            if (filterContext.RequestContext.HttpContext.Request.IsAjaxRequest())
            {
                filterContext.HttpContext.Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1));
                filterContext.HttpContext.Response.Cache.SetValidUntilExpires(false);
                filterContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);
                filterContext.HttpContext.Response.Cache.SetNoStore();
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      您是否大量使用 AJAX?确保每个 AJAX 请求都是唯一的,否则 IE9 将提供请求响应的缓存版本。

      例如,如果您的 AJAX 请求 URL 通常如下所示: http://www.mysite.com/ajax.php?species=dog&name=fido

      相反,为每个请求添加一个唯一值,这样 IE 就不会只使用缓存的响应。在 Javascript 中最简单的方法是每次发出请求时都会增加一个变量:

      var request_id = 0;
      
      var request_url = "http://www.mysite.com/ajax.php?species=dog&name=fido&request_id="+request_id;
      request_id++;
      

      【讨论】:

      【解决方案3】:

      试试

      <META HTTP-EQUIV="Pragma" CONTENT="no-cache">
      <META HTTP-EQUIV="Expires" CONTENT="-1">
      

      另外,必读:http://support.microsoft.com/kb/234067

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-08-11
        • 2011-04-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多