如何阻止浏览器使用HTTP 1.1标头缓存我的网页?

时间:2010-11-02 10:09:44

标签: http http-caching

虽然我已将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的行为相同。

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

4 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分: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字段值”*“意味着缓存无法从后续请求的请求标头中确定此响应是否是适当的表示。”

答案 2 :(得分:0)

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

  

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

答案 3 :(得分:-1)

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

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