【问题标题】:How can I stop browsers caching my web page using HTTP 1.1 headers?如何阻止浏览器使用 HTTP 1.1 标头缓存我的网页?
【发布时间】:2010-11-02 10:09:44
【问题描述】:

虽然我已将 Expires 设置为过去的日期,并将 Cache-Control 设置为 no-store, no-cache,但我的网页仍然会被缓存。

以下是发送到浏览器的 HTTP 标头:

Date: Tue, 02 Nov 2010 09:13:23 GMT
Server: Apache/2.2.15 (el)
X-Powered-By: PHP/5.2.13
Set-Cookie: PHPSESSID=2luvb7b316lfc8ht570s1l1v84; path=/
Set-Cookie: Newsletter_Counter=17; expires=Wed, 02-Nov-2011 09:13:23 GMT; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 20
Connection: close
Content-Type: text/html; charset=UTF-8

FF 3.6、Safari 和 IE 8 的行为相同。

如何让浏览器停止缓存页面?

【问题讨论】:

  • 所以,我猜你的问题是,我如何让这个页面不缓存?
  • X-Profane-Cache-Control: stop-caching-this-f-ing-page-you-unholy-bastard-of-a-browser 可能不起作用,但可能会让你感觉更好?

标签: http http-caching


【解决方案1】:

浏览器自己决定缓存。您可以使用随机 GET 参数来强制浏览器不缓存,例如

http://www.foo.com/yourfile.zip?id=1234

【讨论】:

    【解决方案2】:

    以下标头对我来说一直很有效(对于 HTTP/1.1)。您应该需要 Pragma: no-cache。

    Cache-Control: no-cache
    Expires: <some date in the past>
    Vary: *
    

    尝试将您的 Vary 值更改为我的示例中的星号。

    根据http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.44: ““*”的 Vary 字段值意味着缓存无法从后续请求的请求标头中确定此响应是否是适当的表示。”

    【讨论】:

      【解决方案3】:

      使用Cache-Control: no-store 应该禁止任何存储:

      无商店
      […] 如果在响应中发送,缓存不得存储此响应或引发它的请求的任何部分。该指令适用于非共享和共享缓存。 […]

      【讨论】:

        【解决方案4】:

        您确实似乎在做正确的事情(但就像很多人似乎认为发送“Pragma: no-cache”响应标头对浏览器端缓存有一些影响 - 它不应该)。

        缓存是什么意思?如果用户单击“后退按钮”并使用 GET 操作检索它,则不会(通常)再次从服务器获取。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-05-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-09-14
          • 2016-05-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多