对于网站开发,我尝试使用文档中描述的Symfony 4 HTTP缓存。
我在index.php中创建了一个CacheKernel:
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;
在profiler中,头文件是集合:
cache-control "max-age=3600, must-revalidate, public">
但是在浏览器中,头是不一样的,我认为缓存不存储:
Cache-Control: max-age=0, must-revalidate, private
你有一些想法来理解为什么头是不一样的,为什么缓存不工作请?
我如何确保缓存工作,是否有一些日志?
谢谢你的帮助
我可能是错的,因为它涉及到你的实现,但是,如果你在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