这是我的控制器功能
/**
* @Route(
* path = "/",
* defaults = {"page": "1"},
* name = "products_show"
* )
* @Route(
* path = "/page/{page}",
* requirements = {"page": "[1-9]\d*"},
* name = "products_show_by_page"
* )
* @Method("GET")
* @Cache(smaxage = "1800", public = true)
*/
public function showProducts(Request $request, int $page, PaginatorInterface $paginator, ProductRepository $products)
{
$searchQuery = $request->query->get('q', '');
$query = $products->findOrSearchAllJoinedToCategory($searchQuery);
$pagination = $paginator->paginate($query, $page, Product::NUM_ITEMS);
$pagination->setUsedRoute('products_show_by_page');
return $this->render('product/products_show.html.twig', [
'pagination' => $pagination,
'page' => $page,
'searchQuery' => $searchQuery
]);
}
,并且我添加了一个空的KernelCache.php并在index.php中进行了更改。看到
https://symfony.com/doc/current/http_cache.html#symfony-reverse-proxy
并将APP_ENV设置为.env中的产品
但是在更改之后,我仍然得到200响应,而不是304响应。 还有其他待办事项吗? (我有一个简单的Xamp开发系统,并使用Firefox进行了测试)
答案 0 :(得分:1)
您正在混合过期和验证缓存。当您指定共享的最大使用期限时,任何中介缓存都可以返回缓存的项目,而不是将请求发送到服务器,但是当缓存过期时,它们将发送常规请求,服务器将通过缓存头来回答该请求,并指定中介的持续时间缓存可以存储响应。 304标头仅在提供的ETag或上次修改的时间戳与应用程序中的时间戳匹配时才用于验证缓存。您负责实现此逻辑。我在移动设备上,不想搜索文档页面,但是您必须将请求标题与当前数据进行比较,手动创建响应,然后将其标记为未修改。文档中应该有示例,但是如果找不到它们,请随时对其进行ping操作。