apache - 在没有 mod_deflate 的情况下在 Symfony 2 中使用 gzip/compression

标签 apache symfony http-compression

我正在处理在不同服务器上运行的两个不同的 Symfony 2.8 项目。它想使用压缩来加快加载速度。我找到的所有资源都指向 mod_deflate。但是,虽然第一台服务器根本不提供 mod_deflate,但当 FastCGI 启用时,第二台服务器无法使用 mod_deflate

我只找到信息,可以在服务器内启用压缩 (mod_deflate) 或“在脚本中”。但是我没有找到关于这个“脚本中”解决方案的任何详细信息。

是否可以在不使用 mod_deflate 的情况下在 Symfony 中启用压缩?

最佳答案

您可以尝试在 kernel.response 事件中手动 gzip 内容:

namespace AppBundle\EventListener;

use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\HttpKernel\HttpKernelInterface;

class CompressionListener implements EventSubscriberInterface
{
    public static function getSubscribedEvents()
    {
        return array(
            KernelEvents::RESPONSE => array(array('onKernelResponse', -256))
        );
    }

    public function onKernelResponse($event)
    {
        //return;

        if ($event->getRequestType() != HttpKernelInterface::MASTER_REQUEST) {
            return;
        }

        $request = $event->getRequest();
        $response = $event->getResponse();
        $encodings = $request->getEncodings();

        if (in_array('gzip', $encodings) && function_exists('gzencode')) {
            $content = gzencode($response->getContent());
            $response->setContent($content);
            $response->headers->set('Content-encoding', 'gzip');
        } elseif (in_array('deflate', $encodings) && function_exists('gzdeflate')) {
            $content = gzdeflate($response->getContent());
            $response->setContent($content);
            $response->headers->set('Content-encoding', 'deflate');
        }
    }
}

并在配置中注册这个监听器:

app.listener.compression:
    class: AppBundle\EventListener\CompressionListener
    arguments:
    tags:
        - { name: kernel.event_subscriber }

关于apache - 在没有 mod_deflate 的情况下在 Symfony 2 中使用 gzip/compression,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45184718/

相关文章:

apache - Certbot 的 Apache 插件的身份验证器实际上对 “http-01” 挑战做了什么?

Django SSL 证书和静态媒体

apache - 仅允许来自特定 IP 的请求

sed - 缩小 text/html 模板中的 HTML 文件

python - SCRIPT_NAME 与 apache cgid 模块中的 web.py 不匹配 REQUEST_URI

php - 复合外键原则 Symfony 2 的重叠非主键

symfony - composer.json 无法解析可安装的软件包集

php - 如何在 Doctrine ORM 中使用 createQueryBuilder 选择特定列?

java - gzip 压缩不适用于我的自定义 java HTTP 服务器

http - gzip 没有服务器支持?