2013-10-01 77 views
1

我遇到了问题(在不同的主机上),我不能真正改变主机设置,所以我正在寻找PHP解决方案。Symfony响应缓存控制头重复

当我向浏览器发送响应(Symfony的HttpFoundation \ Response)时,一些标题是重复的,它们自相矛盾。比浏览器不会缓存它们。

PHP代码

$response = new Response(
     $html, 
     200, 
     array(
      "content-type" => "text/html; charset=UTF-8", 
     ) 
    ); 

    $response->setCache(array(
     'last_modified' => $page->getEditedAt(), 
     'max_age'  => $staticCache, 
     's_maxage'  => $staticCache, 
     'private'  => false, 
     'public'  => true, 
    )); 

在某些浏览器

缓存控制报头:最大生存周期= 1800,公共,S-最大生存周期= 1800

缓存控制:无-store,no-cache,must-revalidate,post-check = 0,pre-check = 0

Date:2013年10月1日星期二15:08:39 GMT

到期日:星期四,1981年11月19日8时52分00秒GMT

杂注:无缓存

但我的页面应该是公开和缓存。标题的其余部分在哪里,我如何关闭它们?

回答

0

PHP正在覆盖您的缓存设置,即“过期”日期非常具体,并且包含在PHP source code中。根据this的堆栈溢出回答,这是开发者的生日。

您可以通过更改php.ini中的session.cache-limiter setting来关闭此功能。 session_cache_limiter function页面有更多关于在这里设置的可能值的信息。尝试将值设置为公开或无效并再次测试。

你可以看到session.cache_limiter设置的当前值是什么与回声值小的测试页:

<?php 

echo(ini_get('session.cache_limiter')); 

你说你正在寻找一个PHP的解决方案,因为你不能在编辑主机设置。您可以使用ini_set函数更改代码中的值。