我尝试了很多方法让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中的缓存)?
答案 0 :(得分:3)
正确的方法是在响应中发送这些HTTP标头:
Pragma: no-cache
Expires: -1
Cache-Control: no-cache, no-store
使用它们可以使所有内容在IE中运行而无需任何其他修改。
答案 1 :(得分:1)
最简单的方法是在查询字符串上附加一个带有压缩日期/时间戳的参数...这使它看起来像浏览器的一个全新页面。
只是快速更新,如果要将数据发布到服务器,那么IE将跳过缓存并加载新数据。但是,如果您只发出GET请求,那么IE将查看URL以及它自己的设置,以确定是从高速缓存中提取还是实际转到服务器获取数据。
现在,如果用户将“检查存储页面的较新版本”设置为“从不”,那么除了向查询字符串附加值之外,您无法做任何事情。有关这些选项的MS详细信息,请参阅KB263070。快速浏览一下微软的答案,可以看到很多人都对此感到满意。始终给出的解决方案是让用户修改其缓存设置。
所以,对你而言,解决方案将是(复杂程度)
许多应用程序选择第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指令,如果以上不是你想要的。