代码之家  ›  专栏  ›  技术社区  ›  jgauffin

强制IE获取页面

  •  2
  • jgauffin  · 技术社区  · 14 年前

    我尝试过很多方法让IE8重新加载一个页面,但都失败了。IE一直使用它的内部缓存,而不向Web服务器请求它。

    我正在从我的Web服务器发送以下邮件头:

    Response.Add(new StringHeader("Expires", DateTime.UtcNow.AddYears(-1).ToString("r")));
    Response.Add(new StringHeader("Cache-Control", "no-store, no-cache, must-revalidate, max-age=0"));
    Response.Add(new StringHeader("Pragma", "no-cache"));
    Response.Add(new StringHeader("Last-Modified", DateTime.UtcNow.ToString("r")));
    

    这只是我尝试过的多种组合之一。

    如何使IE每次都获取页面(而不强制用户关闭IE中的缓存)?

    3 回复  |  直到 14 年前
        1
  •  3
  •   jgauffin    14 年前

    正确的方法是在响应中发送这些HTTP头:

    Pragma: no-cache
    Expires: -1
    Cache-Control: no-cache, no-store
    

    使用它们可以使所有东西在IE中工作而不需要任何其他修改。

        2
  •  1
  •   ChrisLively    14 年前

    最简单的方法是在查询字符串上附加一个带有压缩日期/时间戳的参数…这使得浏览器看起来像一个全新的页面。

    只是一个快速更新 如果要将数据发布到服务器,则IE将跳过缓存并加载新数据。但是,如果您只是发出GET请求,那么IE将查看URL和它自己的设置,以确定是从缓存中提取数据,还是实际转到服务器中获取数据。

    现在,如果用户将“检查存储页面的更新版本”设置为“从不”,那么除了向查询字符串追加值之外,您无法对其执行任何操作。见 KB263070 有关这些选项的详细信息,请参阅MS。快速浏览一下微软的答案,就会发现很多人都被这个问题困扰了。始终提供的解决方案是让用户修改其缓存设置。

    因此,对于您来说,解决方案将是(在复杂程度上)

    1. 附加一个高度可变的查询字符串值
    2. 通知您的用户,他们必须将“检查新版本”设置更改为每次访问页面或自动访问。
    3. 更改链接以引起回发。(哎呀)

    许多应用程序选择项目2或项目1。原因是2对代码基的影响最小,而项1对用户的影响最小。

    如果这是一个管理网站,那么我建议使用选项2,因为您应该对用户的桌面设置有相当大的影响力。

        3
  •  0
  •   Chris L    14 年前

    希望我能理解你的问题, 也许可以尝试一下,这将清楚:

       List<string> keys = new List<string>();
        IDictionaryEnumerator enumerator = Cache.GetEnumerator();
        while (enumerator.MoveNext())
        {
            keys.Add(enumerator.Key.ToString());
        }
    
        foreach(string key in keys)
        {
            Cache.Remove(key);
        }
    

    如果这需要在多个页面上进行,可以将其放入母版页(或使用其他重构)。

    还有outputcache指令,如果上面不是你要找的。

    推荐文章