Brotli压缩

Brotli是一种全新的数据格式,可以提供比Zopfli20-26%的压缩比。据谷歌研究,Brotli压缩速度同zlibDeflate实现大致相同,而在Canterbury语料库上的压缩密度比LZMAbzip2略大。

链接:Google开源Brotli压缩算法

微软使用了一种基于谷歌提供的C代码的实现,向.NET Core 2.1添加了Brotli压缩支持。由于Brotli得到了许多Web浏览器和Web服务器的广泛支持,所以.NET Core提供对这项技术的支持是非常有用的。

什么是 Brotli 压缩算法
Brotli最初发布于2015年,用于网络字体的离线压缩。Google软件工程师在2015年9月发布了包含通用无损数据压缩的Brotli增强版本,特别侧重于HTTP压缩。其中的编码器被部分改写以提高压缩比,编码器和解码器都提高了速度,流式API已被改进,增加更多压缩质量级别。新版本还展现了跨平台的性能改进,以及减少解码所需的内存。

与常见的通用压缩算法不同,Brotli使用一个预定义的120千字节字典。该字典包含超过13000个常用单词、短语和其他子字符串,这些来自一个文本和HTML文档的大型语料库。预定义的算法可以提升较小文件的压缩密度。

使用brotli替换deflate来对文本文件压缩通常可以增加20%的压缩密度,而压缩与解压缩速度则大致不变。使用Brotli进行流压缩的内容编码类型已被提议使用“br”。

Brotli 的实际压缩效果,需要根据需要来具体分析,目前并不是每个网站都有较好的加速效果,另外,目前仅仅被限制在HTTPS上,HTTP是不支持的。

ubuntu 20.04 系统上自带的 apache 2.4.41 上启用 brotli 压缩算法的方式如下:

$ sudo apt-get install brotli

$ sudo a2enmod brotli

Apache 2 的配置文件增加 brolti 的配置信息,如下:

<VirtualHost 1.2.3.4:443>

    DocumentRoot /var/www/
    ServerName example.com

    SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
    Include /etc/letsencrypt/options-ssl-apache.conf

    CustomLog /var/log/apache2/example.com.access.log common
    ErrorLog /var/log/apache2/example.com.error.log

    <IfModule mod_brotli.c>
      SetOutputFilter BROTLI_COMPRESS;DEFLATE

      BrotliCompressionQuality  6
      BrotliCompressionWindow 18

      AddOutputFilterByType BROTLI_COMPRESS text/html
      AddOutputFilterByType BROTLI_COMPRESS text/plain
      AddOutputFilterByType BROTLI_COMPRESS text/xml
      AddOutputFilterByType BROTLI_COMPRESS text/css
      AddOutputFilterByType BROTLI_COMPRESS text/javascript
      AddOutputFilterByType BROTLI_COMPRESS application/x-javascript
      AddOutputFilterByType BROTLI_COMPRESS application/javascript
      AddOutputFilterByType BROTLI_COMPRESS application/json
      AddOutputFilterByType BROTLI_COMPRESS application/x-font-ttf
      AddOutputFilterByType BROTLI_COMPRESS application/vnd.ms-fontobject
      AddOutputFilterByType BROTLI_COMPRESS image/x-icon
    </IfModule>

</VirtualHost> 

重启服务,如下:

$ sudo systemctl restart apache2.service

测试结果

$ curl -I -H 'Accept-Encoding: br' https://www.mobibrw.com
HTTP/1.1 200 OK
Date: Wed, 10 Feb 2021 01:17:49 GMT
Server: Apache
Vary: Accept-Encoding,Cookie
Cache-Control: max-age=3, must-revalidate
Upgrade: h2
Connection: Upgrade
Last-Modified: Wed, 10 Feb 2021 01:16:24 GMT
Content-Encoding: br
Content-Length: 1
Content-Type: text/html; charset=UTF-8

参考链接