2

我尝试了多种方法让 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 内的缓存)?

4

3 回答 3

3

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

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

使用它们可以使 IE 中的一切工作,无需任何其他修改。

于 2010-10-09T08:52:51.133 回答
1

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

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

现在,如果用户将“检查存储页面的较新版本”设置为从不,那么除了将值附加到查询字符串之外,您无能为力。有关这些选项的详细信息,请参阅KB263070。快速浏览一下微软的答案,就会发现很多人都被这个问题所困扰。总是给出的解决方案是让用户修改他们的缓存设置。

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

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

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

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

于 2010-10-07T19:12:56.740 回答
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 指令,如果上面不是你要找的。

于 2010-10-07T19:44:52.430 回答