如何防止经典ASP应用程序上的页面缓存?

时间:2012-09-06 02:53:56

标签: asp-classic cache-control

我需要在经典ASP应用程序上缓存一些页面,但我已经尝试了所有可能的标题组合,似乎没有任何工作:

Response.Expires         = -1
Response.ExpiresAbsolute = Now() - 1
Response.CacheControl    = "no-cache; private; no-store; must-revalidate; max-stale=0; post-check=0; pre-check=0; max-age=0"
Response.AddHeader         "Cache-Control", "no-cache; private; no-store; must-revalidate; max-stale=0; post-check=0; pre-check=0; max-age=0"  ' Same as previous line, I know, just in case.
Response.AddHeader         "Pragma", "no-cache"
Response.AddHeader         "Expires", "-1"

我也尝试重新启动网站和IIS,但无济于事。当我离开页面并使用浏览器的后退按钮返回页面时,它不会重新加载。

我在这里缺少什么?

编辑:经过更多的谷歌搜索后,我发现并实施了this JavaScript solution,因为它是客户端的,所以它不是防弹的,我更喜欢服务器端解决方案,但它完成了这项工作!

不过,我想了解任何服务器端选项。

4 个答案:

答案 0 :(得分:9)

您的印象是浏览器的后退按钮的结果与HTTP缓存有关,但事实并非如此。

提供后退按钮由浏览器决定,从HTTP堆栈的角度来看,应用程序。应用程序没有义务考虑用于呈现窗口内容的任何http请求的缓存要求。实际上,许多浏览器都能够显示通过http以外的其他协议传送的内容。

考虑使用后退按钮的最常见方案。用户从网络搜索引擎(google,bing,...)获取一些搜索结果,点击其中一个结果,快速看到内容不是他们要查找的内容,然后点击后退按钮。为了优化用户的体验,当从页面导航时,大多数浏览器将保持页面的许多资源(甚至是页面呈现的窗口)。然后可以通过重新组合这些资源或甚至简单地再次显示原始窗口来实现后退按钮。

答案 1 :(得分:4)

似乎没错..尝试使用它。

在向用户发送任何HTML之前运行这些声明,即在任何Response.Write<%=foo()%>

之前
Response.Buffer = True
Response.CacheControl = "no-cache"
Response.AddHeader "Pragma", "no-cache"
Response.Expires = -1

更正拼写错误的单词Response。

答案 2 :(得分:1)

当您按下后退按钮时,某些浏览器始终会缓存。有一种方法可以捕获资源管理器的事件返回按钮并做一些事情虽然可能是可怕的。您可以通过AJAX加载页面数据,并通过javascript生成的randon变量阻止缓存。 如果您需要一个例子请告诉我...

答案 3 :(得分:0)

防止经典ASP上的特定页面缓存。请尝试以下代码:

<% Response.CacheControl = "no-cache, no-store, must-revalidate" %>

在以下部分添加上述代码。