2

我正在使用默认的 Symfony2 反向代理,并且我需要根据 cookie 设置来单独缓存相同的 URL。

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

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

我尝试更改通常设置为的 Vary 标头:

Vary: Accept-Encoding

..并将其设置为:

Vary: Accept-Encoding, basic

..或者:

Vary: Accept-Encoding, normal

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

最好的方法是什么?

4

1 回答 1

1

变化:Accept-Encoding 告诉客户端或您的反向代理为不同的编码单独缓存 url。(即有/无gzip)。

如果您有不支持 gzip 的旧浏览器在没有 gzip 的情况下为页面提供服务,而对于使用 gzip 的较新浏览器,这将特别有用......因此您的反向代理将缓存同一 url 的两个变体。如果没有此设置,您的反向代理可能最终会向不支持它的浏览器提供 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);
}

受到这篇博文的启发。

于 2013-05-26T18:09:52.657 回答