如何防止浏览器显示缓存版本的页面?

5

一种解决方案是在URL中添加一个QueryString变量,该变量是一个随机的GUID,但这似乎有些混乱。是否有某个设置可以防止浏览器显示页面的缓存版本?


添加一个随机生成的查询字符串变量是一个很老的技巧 ;) - backslash17
6个回答

9
您可以像这样添加元标记。
<meta http-equiv="pragma" content="no-cache" />

6
在我们的ASP.Net项目中,我们创建一个BasePage作为所有其他页面的继承类。在基础页面中,我们有一个函数。
Public Sub DisableCaching()
    With Response
        .Expires = 0
        .ExpiresAbsolute = Date.Today.AddDays(-1)
        .AddHeader("pragma", "no-cache")
        .AddHeader("cache-control", "no-cache")
    End With
End Sub

我们称之为任何不想被缓存的页面。

1.- .AddHeader("cache-control", "no-cache") 2.- .CacheControl = "no-cache"这两行代码的作用完全相同,都是添加一个名为“cache-control”,值为“no-cache”的头部信息。 - backslash17
在循环的哪个阶段调用这个方法最有效? - Ant Swift
在我们的项目中,通常是Page_Load中的第一行。 - Gary.Ray

3

一种方法是添加“过期时间或缓存控制头”。

这个方法摘自Yahoo最佳实践(http://developer.yahoo.com/performance/rules.html)

这个规则有两个要点:

* For static components: implement "Never expire" policy by setting far future Expires header
* For dynamic components: use an appropriate Cache-Control header to help the browser with conditional requests

浏览器(以及代理)使用缓存来减少HTTP请求的数量和大小,从而使网页加载更快。Web服务器使用HTTP响应中的Expires头告诉客户端可以缓存一个组件的时间有多长。这是一个远期的Expires头,告诉浏览器此响应直到2010年4月15日之前都不会过时。

  Expires: Thu, 15 Apr 2010 20:00:00 GMT

如果您的服务器是Apache,可以使用ExpiresDefault指令来设置相对于当前日期的到期日期。以下是ExpiresDefault指令的示例,将到期日期设置为请求时间后的10年。
  ExpiresDefault "access plus 10 years"

基本上,您可以设置过期日期来“通知”浏览器已经过期的组件。因此,浏览器将重新请求站点。
假设您需要这个用于网页开发,另一种方法是强制清空缓存。在Firefox上,可以通过CTRL + F5或CTRL + SHIFT + R完成。
希望这能帮到您, 卢卡斯

3
将Cache-Control头设置为no-cache。

2

试试以下任何一种方法:

Response.Cache.SetExpires(DateTime.Now.AddSeconds(360));
Response.Cache.SetCacheability(HttpCacheability.Private)
Response.Cache.SetSlidingExpiration(true);

Page.Response.Cache.SetCacheability(HttpCacheability.NoCache)

Also see this question.


1
一种解决方案是在URL中添加一个QueryString变量作为随机GUID,但这似乎有点凌乱。为什么会凌乱呢?这是最可靠的方式。不一定非要使用GUID,也可以使用当前时间。

1
我同意。这是一种非常安全的方法,可以在各种浏览器上实现您想要的功能。通常我只需向查询字符串添加一个参数,例如&nocache={URLENCODEDDateTime}。 - JohnFx
一个主要的缺点是搜索引擎可能会认为每个URL都是单独的页面。例如,对于大多数搜索引擎来说,index?guid=1234和index?guid=1235是不同的URL,即使它们包含完全相同的内容。URL用于标识资源,头文件用于控制缓存。 - Frank Farmer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接