感谢你来到这里
我真的很激动
盼望,能有你的支持
捐赠可扫描二维码转账支付
支付宝扫一扫付款
微信扫一扫付款
(微信为保护隐私,不显示你的昵称)
到现在为止,一直在假定,每一个URI都只能对应目标资源的某一个表现层。默认条件下,HTTP缓存使用的是资源的URI作为缓存的键。如果两个人请求的是某个缓存资源的同一个URI,则第二个人将收到被缓存的响应。
但有时这还不够,同一URI的不同版本需要被缓存,基于一或多个请求头的值。例如,如果你针对受支持的客户端来压缩页面,则任何一个URI会变为两个表现层:一个是客户端支持压缩时的,另一个则是当客户端不支持压缩时的。这种判断,将交由Accept-Encoding
请求头的值来处理。
本例中,你需要让缓存为某特定URI来存储压缩的和未经压缩的两个版本的响应,然后基于请求中的Accept-Encoding
值来决定返回哪一个。这是通过Vary
响应头来实现的,它是个用英文逗号分隔的不同头的列表,每个头的值可以用来激发一个请求资源的不同表现层。
1 | Vary: Accept-Encoding, User-Agent |
这个特定的Vary
头,将基于URI,以及Accept-Encoding
和User-Agent
请求头的值,去缓存每一个资源的不同版本。
Response
提供了一个简明接口,用于管理Vary
头:
1 2 3 4 5 | // set one vary header 设置一个Vary头
$response->setVary('Accept-Encoding');
// set multiple vary headers 设置多个Vary头
$response->setVary(array('Accept-Encoding', 'User-Agent')); |
setVary()
方法接收的参数可以是一个头名称,或是一个专为不同的响应缓存而准备的“头名称”的数组。
本文,包括例程代码在内,采用的是 Creative Commons BY-SA 3.0 创作共用授权。