1

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

杂注:无缓存

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

4

1 回答 1

0

PHP 正在覆盖您的缓存设置,“过期”日期非常具体,并包含在PHP 源代码中。根据这个堆栈溢出的答案,今天是开发者的生日。

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

您可以通过一个小测试页面来查看 session.cache_limiter 设置的当前值,该页面回显该值:

<?php

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

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

于 2013-11-01T00:24:40.230 回答