使用服务器端包含

编辑本页

警告:您正在浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 5.2,现已不再维护。

本页的更新版本用于Sy欧宝娱乐app下载地址mfony 6.2(当前稳定版本)。

使用服务器端包含

以类似的方式ESI(边缘包括), SSI可用于控制响应片段上的HTTP缓存。最重要的区别是,大多数网络服务器直接知道SSIApacheNginx等。

SSI指令是通过HTML注释完成的:

1 2 3 4 5 6 7 8 9 10 11
<!文档类型超文本标记语言><超文本标记语言><身体><!——……一些内容——><!——在这里嵌入另一个页面的内容——><!——# include虚拟= " http://..。”--><!——……更多内容——>身体>超文本标记语言>

还有一些其他的可用的指令但Sym欧宝娱乐app下载地址fony只管理# include虚拟一个。

谨慎

小心SSI,你的网站可能是注射的受害者。请读一读OWASP的文章先!

当web服务器读取一个SSI指令时,它会请求给定的URI或直接从缓存中给出。它重复这个过程,直到没有更多的SSI指令需要处理为止。然后,它将所有响应合并为一个并将其发送给客户端。

在Symfony中使用SS欧宝娱乐app下载地址I

首先,要使用SSI,请确保在应用程序配置中启用它:

  • YAML
  • XML
  • PHP
1 2 3
#配置/包/ framework.yaml框架:ssi:启用:真正的

假设您有一个具有私有内容的页面,如Profile页面,并且您希望缓存一个静态GDPR内容块。使用SSI,你可以在这个块上添加一些到期时间,并保持页面私有:

12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21 22
/ / src /控制器/ ProfileController.php名称空间应用程序控制器/ /……ProfileController扩展AbstractController公共函数指数()响应//默认情况下,响应是私有的返回->呈现(“配置文件/ index.html.twig”);}公共函数gdpr()响应响应->呈现(“配置文件/ gdpr.html.twig”);//设置为public并添加一些过期时间响应->setSharedMaxAge (600);返回响应;}}

配置文件索引页没有公共缓存,但GDPR块有10分钟的过期时间。让我们将这个块包含到主块中:

1 2 3 4 5 6 7
{#模板/ profile / index . html。树枝#}{#你可以使用控制器引用{{render_ssi(controller('App\\ controller \\ProfileController::gdpr'))}}{#……或URL #}{{render_ssi(url('profile_gdpr'))}}

render_ssi细枝助手将生成如下内容:

1
<!——# include虚拟= " / _fragment吗?_hash = abcdef1234&_path = _controller = App \控制器\ ProfileController:: gdpr”——>

render_ssi确保SSI指令仅在请求具有像这样的头要求时才会生成Surrogate-Capability:设备= " SSI / 1.0”(通常由web服务器提供)。否则,它将直接嵌入子响应。

请注意

有关Symfony缓存片段的更多信息,请访问欧宝娱乐app下载地址应急服务欧宝体育电话国际公司的文档

此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。