X-Symfony-Cache总是错过

时间:2016-06-29 03:48:39

标签: php apache symfony caching utf-8

我正在使用Symfony 2.6 HTTP缓存,我正在遵循Symfony cook book here

中的所有说明

但是,为什么响应总是X-Symfony-Cache:MISS。我尝试修改privates标头上的AppModification.php擦除数组。响应头是X-Symfony-Cache:GET / page:fresh。

我修改了数组后,我遇到了新问题,而我正在尝试登录我的网页时收到错误或消息页面无效。

这里是擦除数组私有头之前的代码:

protected function getOptions()
{
    return array(
        'debug'                  => true,
        'default_ttl'            => 60,
        'private_headers'        => array('Authorization', 'Cookie'),
        'allow_reload'           => false,
        'allow_revalidate'       => false,
        'stale_while_revalidate' => 2,
        'stale_if_error'         => 60,
    );
} 

响应标题:

缓存控制:私人 连接:保持活动 内容类型:text / html的;字符集= UTF-8 日期:2016年6月29日星期三03:37:56 GMT Keep-Alive:超时= 5,最大= 100 服务器:Apache / 2.4.17(Win32)OpenSSL / 1.0.2d PHP / 5.5.30 传输编码:分块 X-已启动方式:PHP / 30年5月5日 X-Symfony-Cache:GET / page:陈旧,无效

我尝试删除数组私有标头

protected function getOptions()
{
    return array(
        'debug'                  => true,
        'default_ttl'            => 60,
        'private_headers'        => array(),
        'allow_reload'           => false,
        'allow_revalidate'       => false,
        'stale_while_revalidate' => 2,
        'stale_if_error'         => 60,
    );
}

响应标题:

年龄:2 Cache-Control:public,s-maxage = 62 连接:保持活动 内容长度:366990 内容类型:text / html的;字符集= UTF-8 日期:2016年6月29日星期三03:41:56 GMT Keep-Alive:超时= 5,最大= 100 服务器:Apache / 2.4.17(Win32)OpenSSL / 1.0.2d PHP / 5.5.30 X-内容摘要:en5ea0d5af1ee851007583987e8dfb3a8207874e303363f3d33c412b7f3fe6c12c X-已启动方式:PHP / 30年5月5日 X-Symfony-Cache:GET / page:陈旧,无效,存储

任何人都可以帮助我,建议解决这个问题?我不知道了,在任何Symfony文档中都找不到。

这是我的控制器:

public function showDetailsAction( $pageSlug,request $request)
{
    $productManager = $this->get('my.core.manager.product');
    $product = $productManager->findOneProduct();
    $options =  $cmsManager->getSlugType($pageSlug);

    $memcacheKey = 'prodrelated_'.$productNumber;
    if($this->get('memcache.default')->get($memcacheKey)){
        $result = $this->get('memcache.default')->get($memcacheKey);
    }else{
        $cloudSearchManager   = $this->get('my.core.manager.cloudsearch');
        $result = $cloudSearchManager->findRelatedProductBy($options);            
        $this->get('memcache.default')->set($memcacheKey, $result, 0, 300);
    }

    $view = $this
        ->view()
        ->setTemplate("MyBundle:Product:detail.html.twig")
        ->setData(array(
            'product'   => $product
        ));

    return $this->handleView($view);
}

1 个答案:

答案 0 :(得分:2)

Symfony Cache层就像一个中间HTTP缓存,就像Varnish那样的反向代理。

这意味着对于可缓存的响应,它需要是公共的(任何缓存都可以存储它)而不是私有的(只有浏览器缓存可以存储它)。此外,必须使用适当的缓存策略,例如Cache-Control标头中的max-age或Expires标头。