我已经阅读了Bundle文档(FOS rest-bundle),并且在压缩响应时找不到任何东西,而且我无法将压缩设置为在Web服务器级别进行。
有没有办法使捆绑包返回gzip(或放气)压缩响应?
我当前的想法是实现响应侦听器,捕获并压缩它,但我觉得可能存在一种现有的出路。
我无法在FOS Rest Bundle中找到启用此功能的任何内容-最有可能的是他们希望它可以在服务器级别完成。解决方案是创建一个事件订阅服务器:
public function getSubscribedEvents() {
return [KernelEvents::RESPONSE => ['compressResponse', -256]];
}
在我的压缩响应方法中,我对主体内容使用deflate并添加适当的内容编码标头:
public function compressResponse(FilterResponseEvent $event)
{
$response = $event->getResponse();
if ($response->headers->get('content-type') !== 'application/json') {
return;
}
$response->setContent(gzdeflate($response->getContent()));
$response->headers->set('Content-encoding', 'deflate');
}
这很好地满足了我们的目的。
答案 0 :(得分:1)
我们使之发生在Apache级别,以便通过使用以下conf来为应用程序/ json输出启用网络服务器压缩。
从standard deflate conf in PHP buildpack复制并用以下内容覆盖:
<IfModule filter_module>
<IfModule deflate_module>
AddOutputFilterByType DEFLATE application/json text/html text/plain text/xml text/css text/javascript application/javascript
</IfModule>
</IfModule>
向该配置文件添加 application / json 对我们来说是成功的秘诀。