#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