Symfony 3.4 http缓存,始终为Cache-Control:max-age = 0,必须重新验证,私有

Dev*_*per 6 caching symfony foshttpcachebundle

我尝试标注

 * @Cache(expires="+10 hours", public=false) 
Run Code Online (Sandbox Code Playgroud)

或在控制器中

$maxAge = 60*60;
$response->setExpires(Carbon::create()->addHour());
$response->setSharedMaxAge($maxAge);
$response->setPublic();
$response->setMaxAge($maxAge);
Run Code Online (Sandbox Code Playgroud)

而且还有 Cache-Control: max-age=0, must-revalidate, private

应用使用会话,用户正在登录-我想要-缓存私有,但没有任何效果-我总是能得到这个。

我已经添加 FOS\HttpCacheBundle\FOSHttpCacheBundle()

(只需添加)希望它能覆盖symfony缓存并允许将发送缓存设为私有-但什么都不会改变。

小智 9

从Symfony 3.4和4.0开始,此行为是新的。如果用户会话已初始化,它将始终按照您的问题中所述设置标头。

在Symfony 4.1中引入的功能可以覆盖此行为。但是,由于这是一项新功能,因此不会反向移植到Symfony 3.4。

$response->headers->set(AbstractSessionListener::NO_AUTO_CACHE_CONTROL_HEADER, 'true');
Run Code Online (Sandbox Code Playgroud)

您可以在Symfony文档中阅读有关此内容的内容:HTTP缓存和用户会话

  • 我读错了吗,或者这意味着在v3.4中,只要您有活动的用户会话,就无法将ESI与HTTP缓存一起使用? (3认同)