首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用symfony2 http缓存的动态头缓存策略

使用symfony2 http缓存的动态头缓存策略
EN

Stack Overflow用户
提问于 2013-10-13 14:36:10
回答 1查看 668关注 0票数 0

我试图使用私有/公共缓存,以避免检索用于构建主页内容的所有数据。这是安静的静态内容。

我试着那样做。

代码语言:javascript
复制
    $response->setMaxAge(600);
    // mark the response as either public or private
    $response->setPublic();
    $response->setPrivate();

    // set the private or shared max age
    $response->setMaxAge(2000);
    $response->setSharedMaxAge(2000);
    $response->setETag(md5($response->getContent()));
    $response->isNotModified($this->getRequest());
    // set a custom Cache-Control directive
    $response->headers->addCacheControlDirective('must-revalidate', true);

但是,我有一些小的信息,可以真正动态地改变,比如语言,cy选择。

如果用户决定改变语言或货币,如何改变内容?

它目前正在为语言工作,因为URL是不同的then .then/fr或then.then/en。

但是,货币的信息不在网址中,其他的信息,如认证或未认证,也不在网址中。

那么,如何使用Http缓存并使其与用户操作的真实情况相适应呢?

谢谢你的帮助。

尤尼

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-14 18:38:05

在使用HTTP缓存时,您必须将应用程序视为一个整体。

根据反向代理的不同,默认策略是根据页的URI缓存页面.ETag用于发出条件请求,以避免从后端获取实际数据,但它不会改变缓存策略的行为。

因此,使用当前的设置,每次用户访问,比方说example.net/fr,在定义的2000秒内,它将获得从后端检索到的第一个缓存内容,而不管他选择何种货币。

如果要优化性能,则需要减少以删除较不常见的信息。

在您的示例中,您可能希望缓存至少2种内容的表示:

  1. FR + EUR
  2. EN + EUR

所以。

为什么?因为您不想缓存所有可能的表示,否则您的缓存将变得无用。

为了提高缓存策略的效率,您需要能够最大限度地缓存数据,所以如果您有“欢迎{用户名}”这样的块,它将失败,因为您可能必须为每个用户缓存您的内容的表示,这是错误的。

保持某种类型的“欢迎{用户名}”块的最佳方法是使用ESI,它允许您使用不同的缓存策略(或者根本没有缓存)将布局分割到几个块中。

在你的情况下,问题是,我打赌货币是存储在某种曲奇。默认情况下,大多数反向代理(如清漆)不使用cookie缓存响应,因为它可能是一个主要的安全漏洞。

因此,您基本上有两个解决方案,定义您的自定义策略,在使用Varnish或使用HTTP功能(自定义标头+变量)时非常容易。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19346379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档