FOS Rest Bundle:可以压缩响应吗?

时间:2018-09-28 19:12:06

标签: symfony fosrestbundle

我已经阅读了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');
}

这很好地满足了我们的目的。

1 个答案:

答案 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 对我们来说是成功的秘诀。