我正在使用默认的Symfony2反向代理,我需要根据cookie设置分离相同URL的缓存。
该网站通过缩小图片和删除JavaScript来实现“基本”网站视图。由于内容相同,我使用了相同的URL,但当然缓存是一个问题。
我需要能够单独缓存它们(或者只是确保清除缓存)。
我尝试更改通常设置为的 ..并将其设置为: ..或: 在我的Mac上Chrome实际上很棒,但Safari忽略了它。我此时停止检查其他浏览器。 最好的方法是什么?Vary: Accept-Encoding
Vary: Accept-Encoding, basic
Vary: Accept-Encoding, normal
答案 0 :(得分:1)
Vary:Accept-Encoding告诉客户端或您的反向代理分离不同编码的URL的缓存。 (即有/无gzip)。
如果您的旧浏览器不支持gzip在没有gzip的情况下为页面提供服务,而且对于使用gzip的新浏览器,则此功能特别有用...因此您的反向代理将缓存同一网址的两个变体。如果没有此设置,您的反向代理可能最终会向不支持它的浏览器提供gzip压缩内容...会产生不需要的结果。
您正在寻找的可能是ETag标题,有点像缓存的“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博客帖子启发。