Ale*_*exV 90 proxy caching http
我使用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代理上的缓存可以基于所服务页面的编码,但我不明白:变化:接受
J.J*_*.J. 94
该cache-control消息头是HTTP服务器来告诉缓存代理的一个响应的"新鲜"的主要机制.(即,如何/如果长时间将响应存储在缓存中)
在某些情况下,cache-control指令是不够的.此处存档来自HTTP工作组的讨论,描述仅使用语言进行更改的页面.这不是 vary头的正确用例,但上下文对我们的讨论很有价值.(虽然我相信Vary标题会在这种情况下解决问题,但有更好的方法.)从该页面:
Vary严格来说,对于代理来复制服务器所做的事情而言,它是无望的或过于复杂的情况.
一个人为的例子:
您的HTTP服务器具有较大的登录页面.您有两个略有不同的页面具有相同的URL,具体取决于用户以前是否在那里.您可以根据Cookie区分请求和用户的"访问次数".但是 - 由于您的服务器的登录页面太大,您希望中间代理在可能的情况下缓存响应.
URL,Last-Modified和Cache-Control标头不足以将此洞察信息提供给缓存代理,但如果添加Vary: Cookie,缓存引擎会将Cookie标头添加到其缓存决策中.
最后,对于小流量,动态网站 - 我总是发现简单Cache-Control: no-cache, no-store而Pragma: no-cache充足.
编辑 - 更准确地回答您的问题:HTTP请求标头"接受"定义客户端可以处理的内容类型.如果您在同一个网址上有两个相同内容的副本,但仅在内容类型上有所不同,那么使用Vary: Accept可能是合适的.
9月12日更新:
自从此评论最初发布以来,我在评论中出现了一些链接.对于Vary:Accept,它们都是真实世界范例(和问题)的优秀资源.如果你正在阅读这个答案,你也需要阅读这些链接.
第一个是来自杰出的EricLaw,它介绍了Internet Explorer与Vary标题的行为以及它给开发人员带来的一些挑战: Vary Header防止IE中的缓存.简而言之,IE(IE9之前版本)不会缓存使用Vary标头的任何内容,因为请求缓存不包含HTTP请求标头.EricLaw(Eric Lawrence在现实世界中)是IE团队的项目经理.
第二个来自Eran Medan,并且正在讨论Chrome中与Vary相关的意外行为:Backing不能正确处理Vary标头.它与IE的行为有关,除了Chrome开发者采用了不同的方法 - 尽管它似乎并不是一个慎重的选择.
Jas*_*rff 56
Vary: Accept只是说响应是根据Accept请求中的标头生成的.具有不同Accept标头的请求可能会得到不同的响应.
(您可以看到链接的PHP代码正在查看$HTTP_ACCEPT.这是Accept请求标头的值.)
对于HTTP缓存,这意味着必须特别小心缓存响应.它只是对具有完全相同Accept标头的后续请求的有效匹配.
现在这只有在页面可以缓存的情况下才有意义.默认情况下,PHP页面不是.PHP页面可以通过发送某些标头(Expires例如)将输出标记为可缓存.但是否以及如何做到这一点是一个不同的问题.
| 归档时间: |
|
| 查看次数: |
74401 次 |
| 最近记录: |