【问题标题】:Symfony response cache controll headers duplicateSymfony 响应缓存控制头重复
【发布时间】:2013-10-07 20:05:36
【问题描述】:

我遇到了一个问题(在不同的主机上),我无法真正更改主机设置,所以我正在寻找 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,
    ));

浏览器中的一些标题

Cache-Control: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

到期时间:1981 年 11 月 19 日星期四 08:52:00 GMT

Pragma:no-cache

但我的页面应该是公开的和可缓存的。其余的标头设置在哪里?如何关闭它们?

【问题讨论】:

    标签: php symfony header silex http-caching


    【解决方案1】:

    PHP 正在覆盖您的缓存设置,“过期”日期非常具体,包含在 PHP source code 中。根据thisstackoverflow的回答,今天是开发者的生日。

    您可以通过更改 php.ini 中的 session.cache-limiter setting 来关闭此功能。 session_cache_limiter function 页面包含有关此处设置的可能值的更多信息。尝试将值设置为 public 或 none 并再次测试。

    您可以通过一个小测试页面来查看 session.cache_limiter 设置的当前值是多少:

    <?php
    
    echo(ini_get('session.cache_limiter'));
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-20
      • 2017-01-10
      相关资源
      最近更新 更多