【问题标题】:How do you prevent the browser from displaying a cached version of a page?如何防止浏览器显示页面的缓存版本?
【发布时间】:2010-10-25 16:58:12
【问题描述】:

一种解决方案是将 QueryString 变量添加到作为随机 guid 的 url 中,但这似乎有点混乱。是否有某个设置会阻止浏览器显示页面的缓存版本?

【问题讨论】:

  • 添加随机生成的查询字符串变量是一个非常古老的技巧;)

标签: .net asp.net browser caching


【解决方案1】:

您可以像这样添加元标记。

<meta http-equiv="pragma" content="no-cache" />

【讨论】:

    【解决方案2】:

    在我们的 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" 正在做与添加一个完全相同的事情具有“no-cache”值的标头缓存控制。
    • Ath 循环的哪个阶段调用此方法最有效?
    • 在我们的项目中,它通常是 Page_Load 的第一行。
    【解决方案3】:

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

    摘自 Yahoo Best Practices (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 指令的此示例将 Expires 日期设置为自请求时间起 10 年。

      ExpiresDefault "access plus 10 years"
    

    因此,基本上您将能够设置过期日期以“通知”浏览器缓存组件已过期。因此,浏览器将再次请求该站点。

    假设您需要它来进行 Web 开发,另一种方法是强制清除缓存。在 Firefox 上,这可以通过 CTRL + F5 或 CTRL + SHIFT + R 来完成。

    希望这会有所帮助, 卢卡斯

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        试试这个:

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

        另见question。

        【讨论】:

          【解决方案6】:

          一种解决方案是将 QueryString 变量添加到作为随机 guid 的 url,但这似乎有点混乱

          为什么这么乱?这是最可靠的方法。不需要guid,可以是当前时间。

          【讨论】:

          • 我同意。这是一种非常安全的方式,可以在各种浏览器中完成您想要的事情。我通常只是在查询字符串中添加一个参数,例如 &nocache={URLENCODEDDateTime}
          • 一个主要缺点是搜索引擎可能会将每个 URL 视为一个单独的页面。例如就大多数搜索引擎而言,index?guid=1234 和 index?guid=1235 是不同的 URL,即使它们包含完全相同的内容。 URL 用于识别资源,标头用于控制缓存。
          猜你喜欢
          • 2020-11-03
          • 2010-10-17
          • 1970-01-01
          • 2012-06-19
          • 2023-03-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多