Symfony HTTP缓存控制头重写
我刚才回答了这个问题 目前我的代码在Symfony 3.4中Symfony HTTP缓存控制头重写,symfony,http,caching,cache-control,Symfony,Http,Caching,Cache Control,我刚才回答了这个问题 目前我的代码在Symfony 3.4中 $response->setCache([ 'max_age' => 3600, 'public' => true, 's_maxage' => 3600, ]); // (optional) set a custom Cache-Control directive $response->headers->addCacheControlDirective('
$response->setCache([
'max_age' => 3600,
'public' => true,
's_maxage' => 3600,
]);
// (optional) set a custom Cache-Control directive
$response->headers->addCacheControlDirective('must-revalidate', true);
return $response;
出于某种原因,我仍然得到缓存控制
和其他类似的头文件:
Cache-Control: max-age=0, must-revalidate, private, s-maxage=3600
X-Symfony-Cache: GET /: miss
我注意到,在Symfony 3.2中,代码运行良好,但在3.4中,我没有在缓存控制中获得public
(并且max age=0
看起来也很糟糕)
第二件事是在控制器中转储$response
,一切看起来都很好:
#headers: array:2 [▼
"cache-control" => array:1 [▼
0 => "max-age=3600, must-revalidate, public, s-maxage=3600"
]
"date" => array:1 [▼
0 => "Sat, 12 May 2018 18:42:04 GMT"
]
]
这是一种Symfony臭虫吗?我应该报告吗?与Symfony 3.4.14相同。花了5个小时才发现 自3.4版以来,如果存在会话(),symfony将覆盖缓存控制头
Symfony 3.4文档中没有此信息。在我的例子中,我使用了默认配置附带的Symfony/安全包:
security:
providers:
....
firewalls:
main:
anonymous: true
此代码初始化会话。您可能需要使用:
security:
providers:
....
firewalls:
main:
security: false
这里也有同样的问题,仍然想知道为什么会发生这种情况。Symfony 3.4在这里有一个解决方法:在4.1中,您可以通过
$response->headers->set(AbstractSessionListener::NO_AUTO_CACHE_CONTROL_HEADER,'true')禁用这种行为
刚刚偶然发现了这个答案,感谢您为我节省了数小时的调试时间!你知道有什么好方法可以在3.4中禁用这种行为吗?还没有找到编写自定义SessionListener的方法。@Nick不幸没有:(我不得不使用redis进行sql结果缓存,还使用decorators进行服务缓存结果。)