在我的 asp.net 表单应用程序中。我正在尝试阻止某些页面的缓存。 为此,我使用 Response.AppendHeader 设置了一系列缓存控制 header 例如
protected override void OnLoad(Eventargs e) { ... Response.ClearHeaders(); Response.AppendHeader("Cache-Control","no-cache"); .... base.OnLoad(e); }
问题是,当我查看我的网站并查看 Firefox 控制台中的“网络”选项卡以查看请求/响应 header 时,我看到如下行为:
page1.aspx 的 POST 请求/响应,触发重定向(到 page2.aspx) 这里的响应包含正确的 header 。
page2.aspx 的 GET 请求/响应 关联的响应具有缓存控制 header ,只有一个值“pre-check=0”
第二个请求似乎允许页面进行缓存。 注意:page1.aspx 和 page2.aspx 都具有我上面描述的 OnLoad 逻辑。另外,如果我对 page2.aspx 采取一些操作,POST 响应将再次具有正确的 header 。
我在这里缺少什么?我的期望是,OnLoad 中的逻辑应该意味着我总是在响应中获取 header ,因此“总是”获取页面的当前版本?
我看到的是 Firefox 正在加载该页面的缓存版本。
我正在考虑在请求网址中创建一个随机标识符来强制执行此操作,但这似乎有点严厉。
-----更新----- 看来,这可能与“OnLoad”中的缓存代码有关。 我已将这些 header 添加到页面的 Page_Load() 中,它工作正常吗? 有任何想法。
最佳答案
尝试将 Response.AppendHeader("Cache-Control","no-cache"); 替换为
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetNoStore();
并确保您没有 @ OutputCache directive并且不是explicitly preventing cache control 。请参阅this MSDN page on SetCacheability和 SetNoStore .
关于asp.net - 设置 ASP.NET 缓存控制 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8791424/