我使用默认的 Symfony2 反向代理,并且需要根据 cookie 设置单独缓存同一 URL。
该网站通过缩小图像和删除 JavaScript 来提供“基本”网站视图。由于内容相同,我使用了相同的 URL,但缓存当然是一个问题。
我需要能够单独缓存它们(或者只是确保缓存被清除)。
我尝试更改 Vary 标头,通常我将其设置为:
Vary: Accept-Encoding
..并将其设置为:
Vary: Accept-Encoding, basic
..or:
Vary: Accept-Encoding, normal
实际上,这在我的 Mac 上的 Chrome 中效果很好,但 Safari 忽略了它。此时我停止检查其他浏览器。
最好的方法是什么?
Vary:Accept-Encoding 告诉客户端或反向代理为不同的编码单独缓存 url。 (即有/没有 gzip)。
如果您的旧版浏览器不支持 gzip,则在没有 gzip 的情况下为页面提供服务,而对于具有 gzip 的较新浏览器来说,这尤其有用......因此您的反向代理将缓存同一 url 的两个变体。如果没有此设置,您的反向代理可能最终会向不支持它的浏览器提供 gzip 内容...给出不需要的结果。
您正在寻找的可能是ETag http://en.wikipedia.org/wiki/HTTP_ETagheader 有点像用于缓存的“cookie”。
客户端将发送其缓存版本的 etag,然后您可以从应用程序中选择客户端的缓存版本是否有效。
$response = new Response();
$response->setETag(md5('some_identifier'));
if( $response->isNotModified($this->get('request')) )
{
// automatically returns null content response with http 304 ( not modified ) header
return $response;
}
else
{
// .. otherwise return a new response, possibly with a different ETag
// $reponse->setEtag(md5('another_identifier'));
return $this->renderView('MyBundle:Main:index.html.twig', array(), $response);
}
受到启发this http://tracehello.wordpress.com/2011/05/19/symfony2-http-cache-part3-etags/博文。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)