Symfony HTTP缓存控制头重写

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('

我刚才回答了这个问题

目前我的代码在Symfony 3.4中

 $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进行服务缓存结果。)