Symfony2反向代理 - 根据cookie或其他设置分离相同URL的缓存

时间:2013-05-25 19:43:05

标签: caching symfony

我正在使用默认的Symfony2反向代理,我需要根据cookie设置分离相同URL的缓存。

该网站通过缩小图片和删除JavaScript来实现“基本”网站视图。由于内容相同,我使用了相同的URL,但当然缓存是一个问题。

我需要能够单独缓存它们(或者只是确保清除缓存)。

我尝试更改通常设置为的

Vary: Accept-Encoding

..并将其设置为:

Vary: Accept-Encoding, basic

..或:

Vary: Accept-Encoding, normal

在我的Mac上Chrome实际上很棒,但Safari忽略了它。我此时停止检查其他浏览器。

最好的方法是什么?

1 个答案:

答案 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博客帖子启发。