我们的调查向我们表明,并非所有浏览器都以统一的方式尊重http缓存指令.
出于安全原因,我们不希望在我们的应用程序某些网页缓存,有史以来,通过Web浏览器.这必须至少适用于以下浏览器:
我们的要求来自安全测试.从我们的网站注销后,您可以按后退按钮查看缓存页面.
我使用PHP生成动态Web页面.如下面的教程所述(参见下面的链接),当$ _SERVER ['HTTP_ACCEPT']允许时,XHTML文档的MIME类型应为"application/xhtml + xml".由于您可以使用2个不同的MIME("application/xhtml + xml"和"text/html")提供相同的页面,因此您应该将"Vary"HTTP标头设置为"Accept".这将有助于代理上的缓存.
链接:http: //keystonewebsites.com/articles/mime_type.php
现在我不确定:header('Vary:Accept')的含义; 我不太确定'Vary:Accept'会做什么......
我找到的唯一解释是:
在Content-Type标头之后,发送Vary标头(如果我理解正确的话)告诉中间缓存,如代理服务器,文档的内容类型根据请求文档的客户端的功能而变化. http://www.456bereastreet.com/archive/200408/content_negotiation/
任何人都可以给我一个这个标题的"真实"解释(带有该值).我想我理解的事情如下:Vary:Accept-Encoding代理上的缓存可以基于所服务页面的编码,但我不明白:变化:接受
缓存控制标头"no-cache,must-revalidate,private"允许浏览器缓存资源,但强制使用条件请求重新验证.这在FF,Safari和Chrome中可以正常使用.
但是,IE7 + 8不发送条件请求,即请求头中缺少"If-Modified-Since",因此服务器使用HTTP/200而不是HTTP/304进行响应.
以下是完整的服务器响应标头:
Last-Modified: Wed, 16 Feb 2011 13:52:26 GMT
Content-type: text/html;charset=utf-8
Content-Length: 10835
Date: Wed, 16 Feb 2011 13:52:26 GMT
Connection: keep-alive
Cache-Control: no-cache, must-revalidate, private
Run Code Online (Sandbox Code Playgroud)
这似乎是一个IE错误,但我没有在网上找到任何相关内容,所以我想知道是否可能缺少或存在另一个标头会让IE表现得很奇怪?
讨论no-cache和max-age 之间的区别:Cache-Control:max-age = 0和no-cache之间有什么区别?