【问题标题】:Differents between private cache and public cache in symfonysymfony 中私有缓存和公共缓存的区别
【发布时间】:2016-04-09 02:33:01
【问题描述】:

我正在尝试在 symfony 中使用缓存。

在我的控制器中我写了这个 sn-p

    public function indexAction(Request $request)
{
    $response = $this->render('default/index.html.twig', [
        'base_dir' => realpath($this->getParameter('kernel.root_dir').'/..'),
    ]);

    $response->setMaxAge(10);
    $response->setPublic();
    return $response;
}

在我的树枝中我有一个函数 random(100) 然后我在 app_dev.php 和 app.php 中也启用了 $kernel = new AppCache($kernel); 刷新时,我看到相同的“随机数”持续 10 秒,没关系。

如果我省略 $response->setPublic();,缓存将变为私有,并且我始终拥有不同的数字。我也尝试登录我的应用程序,但缓存似乎不起作用

我也尝试在 appCache() 中添加 getOptions

class AppCache extends HttpCache
{
    protected function getOptions()
    {
        return array(
            'debug'                  => false,
            'default_ttl'            => 0,
            'private_headers'        => array('Authorization', 'Cookie'),
            'allow_reload'           => false,
            'allow_revalidate'       => false,
            'stale_while_revalidate' => 2,
            'stale_if_error'         => 60,
        );
    }
}

【问题讨论】:

  • 我不太清楚你的问题是什么,你能说清楚一点吗?
  • 当然!当我使用 $response->setPublic();缓存有效,(为了测试我在树枝中使用 random(100) 并且我看到相同的数字 10 秒),如果我使用 $response->setPrivate() 我总是有不同的数字(刷新浏览器时)跨度>

标签: php symfony caching


【解决方案1】:

如果缓存是私有的,你告诉反向代理你不想缓存响应。 Symfony 将发送此标头:

Cache-Control: private

这会绕过中间代理,因为响应是针对单个用户的。在这种情况下,您使用浏览器缓存。如果您不想这样做,请将其设置为public

您可以在此处阅读更多信息:public vs private response

【讨论】:

  • 当我使用私有时,我不使用缓存?我知道缓存私有是针对单个用户的(如已登录使用)。
  • 不,如果你设置Cache-Control: private你只是不使用反向代理的缓存,但你仍然可以使用浏览器的缓存
  • 非常感谢,这就是我正在寻找的答案!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-04
  • 2014-07-01
  • 2011-03-12
  • 2017-07-15
  • 2011-04-11
  • 2015-12-16
  • 2018-03-27
相关资源
最近更新 更多