1

尽管我已经设置Expires了一个过去的日期,并且Cache-Controlno-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 的行为相同。

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

4

4 回答 4

1

以下标头对我来说一直很有效(对于 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 字段值意味着缓存无法从后续请求的请求标头中确定这是否响应是适当的表示。”

于 2010-11-03T01:45:13.820 回答
1

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

http://www.foo.com/yourfile.zip?id=1234
于 2010-11-02T10:51:31.223 回答
0

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

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

于 2010-11-24T14:43:45.280 回答
-1

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

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

于 2010-11-02T12:43:07.650 回答