HTTP缓存
编辑该页面警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 5.2,不再维护。
读这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。
HTTP缓存
丰富的web应用程序的本质意味着他们的动态。无论多么高效的应用程序,每个请求总是含有更多的开销比静态文件。通常,这很好。但是当你需要你的请求闪电快,你需要HTTP缓存。
缓存在巨人的肩膀上
HTTP缓存,缓存页面的完整输出(响应),绕过您的应用程序完全在后续请求中。缓存整个反应并不总是可能的高度动态的网站,还是?与边边包括(ESI)上,您可以使用HTTP缓存的力量片段你的网站。
Symfob娱乐下载ony缓存系统是不同的,因为它依赖于简单和HTTP缓存中定义的RFC 7234 -缓存。而不是重新缓存方法,Symfony拥抱的标准定义了基本的沟通在网上。ob娱乐下载一旦你理解了基本的HTTP验证和过期的缓存模型,你会准备主Symfony缓存系统。ob娱乐下载
由于与HTTP缓存并不是唯一的Symfony,很多文章已经存在的主题。ob娱乐下载如果你是新到HTTP缓存,瑞安Tomayko一起合作编写的文章缓存做的事情是高度推荐。另一个深入的资源是马克诺丁汉的缓存教程。
网关缓存的缓存
与HTTP缓存时,缓存应用程序完全分开,应用程序和客户端之间的请求。
缓存的工作是接受来自客户端的请求并将其传递回您的应用程序。缓存还将接收响应从您的应用程序和转发到客户端。缓存是“中间人”的请求-响应客户端和应用程序之间的通信。
一路上,缓存将存储每个响应,被认为是“缓存”HTTP缓存)。请求相同的资源时,缓存将缓存的响应发送到客户端,完全无视您的应用程序。
这种类型的缓存被称为HTTP网关缓存和许多存在等清漆,乌贼在反向代理模式Symfony反向代ob娱乐下载理。
提示
网关缓存有时也被称为反向代理缓存,代理缓存,甚至HTTP加速器。
ob娱乐下载Symfony反向代理
ob娱乐下载Symfony附带了一个反向代理用PHP编写的(即网关缓存)。平台反向代理缓存,它不是一个像清漆,但是是一个伟大的方式开始。
提示
有关设置清漆,明白了如何使用清漆加快我的网站吗。
要启用代理,首先创建一个内核缓存:
1 2 3 4 5 6 7 8
/ / src / CacheKernel.php名称空间应用程序;使用ob娱乐下载\包\FrameworkBundle\HttpCache\HttpCache;类CacheKernel扩展HttpCache{}
修改代码前端控制器的包装默认内核到内核缓存:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
/ /公共/ index . php+使用App \ CacheKernel;使用App \内核;/ /……内核美元=新内核($ _SERVER [' APP_ENV '], (bool) $ _SERVER [' APP_DEBUG ']);+ / /包装默认内核CacheKernel“刺激”的环境+如果(“刺激”= = = $内核- > getEnvironment ()) {+ $内核=新CacheKernel($内核);+}美元请求=请求:createFromGlobals ();/ /……
内核将立即作为反向代理缓存:缓存响应从你的应用程序并返回给客户机。
谨慎
如果你使用framework.http_method_override选择阅读的HTTP方法_method
参数,参见上面的链接,你需要做出调整。
提示
内核有一个特殊的缓存getLog ()
方法返回的字符串表示发生在缓存层。在开发环境中,用它来调试和验证您的缓存策略:
1
error_log (美元内核- >getLog ());
的CacheKernel
对象有一个合理的缺省配置,但它可以通过一组精细选项可以设置通过重写getOptions ()方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
/ / src / CacheKernel.php名称空间应用程序;使用ob娱乐下载\包\FrameworkBundle\HttpCache\HttpCache;类CacheKernel扩展HttpCache{受保护的函数getOptions():数组{返回(“default_ttl”= >0,/ /……];}}
选项的完整列表和他们的意义,看到了HttpCache: __construct()的欧宝官网下载app文档。
当你在调试模式(第二个参数内核
构造函数在前端控制器真正的
),Sob娱乐下载ymfony会自动添加一个X-ob娱乐下载Symfony-Cache
头来响应。您还可以使用trace_level
配置选项和设置它没有一个
,短
或完整的
添加这个信息。
短
只添加主请求的信息。用简洁的方式,便于记录您的服务器日志文件中的信息。例如,在Apache您可以使用% {Xob娱乐下载-Symfony-Cache} o
在LogFormat
格式语句。这些信息可以用来提取通用信息缓存路由效率。
提示
你可以改变标题的名称用于跟踪信息使用trace_header
配置选项。
让你的响应HTTP缓存
一旦你添加了一个反向代理缓存(例如像Symfony反向代理或清漆),你准备缓存响应。ob娱乐下载要做到这一点,你需要沟通你的缓存哪一个响应缓存和多长时间。这是通过设置HTTP缓存响应标头。
HTTP指定四个响应缓存头,你可以设置为启用高速缓存:
cache - control
到期
ETag
last - modified
这四个标题是用来帮助你缓存响应通过两个不同的模型:
过期的缓存
的简单的缓存响应的缓存方式为一个特定的时间:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
/ / src /控制器/ BlogController.php使用ob娱乐下载\组件\HttpFoundation\响应;/ /……公共函数指数(){/ /创建一个响应对象,通过呈现模板美元响应=美元这- >呈现(“博客/ index.html.twig”[]);/ /缓存公开3600秒美元响应- >setPublic ();美元响应- >setMaxAge (3600年);/ /(可选)设置一个定制的cache - control指令美元响应- >头- >addCacheControlDirective (“must-revalidate”,真正的);返回美元响应;}
多亏了这个新代码,你的HTTP响应会有以下标题:
1
cache - control:公共,must-revalidate maxage = 3600
这告诉你的HTTP反向代理缓存该反应为3600秒。如果任何人再次请求这个URL前3600秒,您的应用程序不会受到打击。如果你使用Symfony的反向代理,看看ob娱乐下载X-ob娱乐下载Symfony-Cache
标题关于缓存命中率和未命中率的调试信息。
提示
请求的URI作为缓存键(除非你不同)。
这提供了很好的性能和易于使用。但是,缓存失效不支持。如果你的内容改变,你需要等到你的缓存过期页面更新。
提示
事实上,你可以手动缓存失效,但它不是HTTP缓存规范。看到的一部分缓存失效。
如果您需要设置缓存头为许多不同的控制器操作,查看FOSHttpCacheBundle。它提供了一种方法来定义缓存头根据请求URL模式和其他属性。
最后,对于更多信息过期缓存,明白了HTTP缓存过期。
验证缓存
过期的缓存,你说“缓存3600秒!”。但是,当有人更新缓存的内容,你才发现你网站上的内容缓存到期。
如果你需要看更新后的内容立即,你需要无效你的缓存或使用验证缓存模型。
有关详细信息,请参见HTTP缓存验证。
安全的方法:只缓存获取或HEAD请求
HTTP缓存只适用于“安全”的HTTP方法(比如GET和HEAD)。这意味着三件事:
- 不要缓存PUT或DELETE请求。它不会工作,并有很好的理由。这些方法是变异时使用您的应用程序的状态(例如删除博客)。缓存会阻止某些请求和变异的应用程序。
- POST请求通常被认为是当前时间,但是他们可以被缓存当他们包括明确的新鲜信息。然而,帖子缓存并没有被广泛使用,所以如果可能的话你应该避免它。
- 你应该从来没有改变您的应用程序的状态(例如更新博客)当响应GET或请求。如果这些请求缓存,未来可能没有出现在你的服务器的请求。
更反应的方法
响应缓存相关类提供了更多的方法。这里是最有用的:
1 2 3 4 5
/ /标志着陈旧的响应美元响应- >到期();/ /部队响应返回一个304响应,没有内容美元响应- >setNotModified ();
此外,大多数可以通过设置缓存相关的HTTP头单身setCache ()方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
/ /使用该方法来设置一些缓存设置在一个电话/ /(本例中列出了所有可用的缓存设置)美元响应- >setCache ([“must_revalidate”= >假,“no_cache”= >假,“no_store”= >假,“no_transform”= >假,“公共”= >真正的,