Заголовки HTTP-кэша Symfony 4 не совпадают в профилировщике и браузере

#php #symfony #http #symfony4 #http-caching

Вопрос:

Для разработки веб-сайта я стараюсь использовать HTTP-кэш Symfony 4, описанный в документации.

Я создал CacheKernel, который называется index.php вот так :

 namespace App;

use SymfonyBundleFrameworkBundleHttpCacheHttpCache;

class CacheKernel extends HttpCache
{

}
 
 // index.php
$kernel = new Kernel($_SERVER['APP_ENV'], (bool) $_SERVER['APP_DEBUG']);
$kernel = new CacheKernel($kernel);
$request = Request::createFromGlobals();
 

В действии на главной странице:

 $response->setPublic();
$response->setMaxAge(3600);
$response->headers->addCacheControlDirective('must-revalidate', true);

return $response;
 

В профилировщике заголовки-это наборы :

контроль кэша «максимальный возраст=3600, должен быть подтвержден, общедоступен»

Но в браузере заголовки не совпадают, и я думаю, что кэш не сохраняется :

Контроль кэша: максимальный возраст=0, необходимо выполнить повторную проверку, закрыто

У вас есть несколько ide, чтобы понять, почему заголовки не совпадают и почему кэш не работает, пожалуйста ?

И как я могу убедиться, что кэш работает, есть ли какие-то журналы ?

Большое спасибо за помощь

Ответ №1:

Я могу ошибаться, поскольку это относится к вашей реализации, но, если вы находитесь в dev среде, кэш отключен. Это делается для того, чтобы вы могли сразу видеть изменения без необходимости вручную очищать кэш после каждого редактирования, как в старых версиях Symfony. Тот факт, что профилировщик показывает то, что вы ожидаете, prod говорит мне, что он работает и просто переопределяется из-за того, что он находится внутри dev .

Попробуйте переключиться на prod и

посмотрите на X-Symfony-Cache заголовок для получения отладочной информации о попаданиях и пропусках кэша

—https://symfony.com/doc/4.4/http_cache.html#expiration-caching

Там же есть бревно:

Ядро кэша имеет специальный метод getLog (), который возвращает строковое представление того, что произошло на уровне кэша. В среде разработки используйте его для отладки и проверки стратегии кэширования:

 error_log($kernel->getLog());
 

—https://symfony.com/doc/4.4/http_cache.html#symfony-reverse-proxy