使用maxage标头时无法获得304响应

时间:2013-06-14 11:07:21

标签: caching symfony http-status-code-304

我正在尝试缓存静态内容,我希望这些内容的生命周期为一小时且内容是公开的,对每个人来说都是一样的。

我的控制器中有以下代码:

$response = new Response();
$response->setPublic();
$response->setMaxAge(3600);
$response->setSharedMaxAge(3600);

if ($response->isNotModified($request)) {
   return $response;
}

return $this->render(
    'ThemesBundle:Ad:content.html.twig',
     array('context' => $context, 'block' => $block),
     $response
);

但是isNotModified()函数总是返回false。

PS:我正在使用Symfony 2.0.22

1 个答案:

答案 0 :(得分:2)

您犯了一个错误,$response->isNotModified($request)仅在使用validationETag测试的缓存Last-Modified时使用!

在这里,您要使用 expiration 方法(Cache-ControlExpires)。

所以只需删除这些行:

if ($response->isNotModified($request)) {
   return $response;
}

$response->setMaxAge(3600);(和setSharedMaxAge)就可以完成这项工作,你不需要测试任何东西,框架(或客户端导航器)会为你做这件事。

同样的响应将在3600秒内提供,而不会通过操作。 3600秒后,用户将重新通过操作,并将缓存3600秒等。

此外,您可以使用@Cache注释来简化阅读;)

相关问题