强制IE获取页面

时间:2010-10-07 19:10:42

标签: .net internet-explorer browser caching disable-caching

我尝试了很多方法让IE8重新加载页面但失败了。 IE只是继续使用它的内部缓存而不向网络服务器询问它。

我从网络服务器发送以下标题:

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 个答案:

答案 0 :(得分:3)

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

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

使用它们可以使所有内容在IE中运行而无需任何其他修改。

答案 1 :(得分:1)

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

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

现在,如果用户将“检查存储页面的较新版本”设置为“从不”,那么除了向查询字符串附加值之外,您无法做任何事情。有关这些选项的MS详细信息,请参阅KB263070。快速浏览一下微软的答案,可以看到很多人都对此感到满意。始终给出的解决方案是让用户修改其缓存设置。

所以,对你而言,解决方案将是(复杂程度)

  1. 附加高度可变的查询字符串值
  2. 告知您的用户必须将“检查新版本”设置更改为“每次访问该页面”或“自动”。
  3. 更改链接以导致回发。 (呸)
  4. 许多应用程序选择第2项或第1项。原因是2对代码库的影响最小,而第1项对用户的影响最小。

    如果这是一个管理站点,那么我会说选择2,因为你应该对用户的桌面设置有相当大的杠杆作用。

答案 2 :(得分:0)

希望我理解你的问题, 也许试一试,这将清楚:

   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指令,如果以上不是你想要的。