Symfony响应缓存控制标头重复

时间:2013-10-01 15:18:06

标签: php symfony header silex http-caching

我遇到了一个问题(在不同的主机上),我无法真正更改主机设置,所以我正在寻找PHP解决方案。

当我向浏览器发送响应时(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,
    ));

浏览器中的部分标题

  

缓存控制:max-age = 1800,public,s-maxage = 1800

     

Cache-Control:no-store,no-cache,must-revalidate,post-check = 0,pre-check = 0

     

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

     

Expires:Thu,1981年11月19日08:52:00 GMT

     

杂注:无缓存

但我的页面应该是公开的并且可以缓存。其余标题设置在哪里以及如何将其关闭?

1 个答案:

答案 0 :(得分:0)

PHP正在覆盖您的缓存设置,“过期”日期非常具体,并包含在PHP source code中。根据{{​​3}}堆栈溢出答案,这是开发人员的生日。

您可以通过更改php.ini中的this来关闭此功能。 session.cache-limiter setting页面提供了有关可在此处设置的值的更多信息。尝试将值设置为public或nothing,然后再次测试。

你可以看到session.cache_limiter设置的当前值是一个小的测试页面,它回显了值:

<?php

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

您说您正在寻找PHP解决方案,因为您无法编辑主机设置。您可以使用session_cache_limiter function函数更改代码中的值。