-
28-09-2019 - |
题
我已经尝试了许多方法使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内部的缓存)?
解决方案
正确的方法是在响应中发送这些HTTP标头:
Pragma: no-cache
Expires: -1
Cache-Control: no-cache, no-store
使用它们使所有内容都在IE中起作用,而无需任何其他修改。
其他提示
最简单的方法是在查询字符串上使用压缩的日期/时间戳记附加参数...这使其看起来像浏览器的全新页面。
只是快速更新, ,如果您将数据发布到服务器,则IE将跳过缓存并加载新数据。但是,如果您仅发出获取请求,则IE将查看URL,并且自己的设置是确定是从缓存中拉出还是实际转到服务器以获取数据。
现在,如果用户拥有“存储的较新版本”设置为“永远不要”,那么您对查询字符串的值附加值无能为力。看 KB263070 有关MS的详细信息,有关这些选项。快速查看Microsoft的答案显示,有很多人对此感到沮丧。始终给出的解决方案是为了修改其缓存设置。
因此,对您来说,解决方案将是(在复杂性的水平)
- 附加高度可变的查询字符串值
- 通知您的用户,他们必须将“较新版本”设置更改为每次访问页面或自动。
- 更改您的链接以引起后背。 (yuck)
许多应用程序选择项目2或项目1。原因是2对代码群的影响最小,而项目1对您的用户影响最小。
如果这是管理站点,那么我会说选择选项2,因为您应该在用户的桌面设置上具有相当多的杠杆作用。
希望我理解您的问题,也许尝试一下,这将清楚:
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指令,如果以上不是您想要的。
不隶属于 StackOverflow