当前位置: 首页 > 知识库问答 >
问题:

FOS Rest捆绑包:能否将响应压缩?

卞俊贤
2023-03-14

我已经阅读了Bundle文档(FOS-rest Bundle),没有找到任何关于压缩响应的内容,并且我无法将压缩设置为在web服务器级别进行。

有没有办法让bundle返回gzip(或deflate)压缩响应?

我目前的想法是实现一个响应侦听器,捕获并压缩它,但我觉得可能有一个现成的方法

我在FOS Rest捆绑包中找不到任何能够实现这一点的东西——很可能他们希望它在服务器级别完成。解决方案是创建一个事件订阅服务器:

public function getSubscribedEvents() {
    return [KernelEvents::RESPONSE => ['compressResponse', -256]];
}

在我的压缩响应方法中,我在正文内容上使用放气,并添加适当的内容编码头:

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个答案

桂浩言
2023-03-14

我们在Apache级别上实现了这一点,以便通过使用以下配置为应用程序/json输出启用Web服务器压缩。

从PHP buildpack中的标准deflate conf复制,并用以下内容覆盖:

<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添加到这个conf中对我们来说很有用。

 类似资料:
  • 我正在将我的spring-java项目转移到OSGi。 我有一些依赖项,这些依赖项在spring ebr repo或maven repo中不能作为包提供。处理它们的最佳方法是什么? null

  • 我用FOS REST包完成了一个REST Api。我有一个用户实体和一个评论实体。所以我想得到用户评论:/users/{idUser}/comments,但问题是在评论的响应中,用户被包括在内,用户包括他的评论,评论包括用户,用户包括用户。。。所以我最终得到了一个inmense JSON响应。 控制器的我的getCommentsAction使用存储库和findBy方法,有没有办法告诉FOS Res

  • 问题内容: 编辑:Symfony最佳做法回答了我的大部分问题。 关于我的Symfony2应用程序,我有几个问题。 它将有一个前端和一个后端,并且它们将使用一些通用代码(例如日期显示器,分页器,一些经常使用的模板等)。 因此,我创建了一个FrontendBundle和一个BackendBundle,它们分别包含各自的布局。第一个问题:为前端和后端创建捆绑包(这是甚至没有控制器的“通用”捆绑包)的优良

  • 如果您记不住所有键的名称,是否有一种简单的方法可以将捆绑包的内容打印到Logcat(即使只打印键名称也很酷)?

  • 问题内容: 这是我的 我正在与 在我的文件夹中,我只会 我也想看看未压缩的 问题答案: webpack.config.js : 自从Webpack 4 被弃用以来,其使用导致错误: webpack.optimize.UglifyJsPlugin已被删除,请改用config.optimization.minimize 如手册所述,可以使用选项替换插件。通过指定实例,可以向插件提供自定义配置: 这样就

  • 我创建了一个Java应用程序,它使用运行库执行Python脚本。我想知道是否有一种方法可以将Python.exe和必需的库包含在Jar文件中?