又拍云 CDN 支持了 Brotli 了!
前言
我们在此宣布,又拍云 CDN 现在支持 Brotli 算法了。我们之前已经支持了 Gzip 算法,在优化网站速度方面,我们始终不遗余力的进行着新算法的支持和兼容优化。Google 的 Brotli 压缩算法将提升压缩率 20% ,从而可以使用户在不增加 CPU 消耗的情况下提升页面的加载速度,可以给用户带来更好的使用体验。
下面我们进行一些简单的测试,来验证 Brotli 的支持情况,这里我们使用 FireFox 浏览器(版本号为 56.0.2)开发者工具来抓包测试。
测试的 URL 为:
https://wuxuejun.charmelady.net/test.js(访问域名经过又拍云 CDN 进行加速)
抓包结果如下截图所示:
通过 FireFox 开发者工具抓包测试 Brotli 算法,测试结果为:
1)通过请求头信息 Accept-Encoding:gzip, deflate, br 可以得知,该版本的 FireFox 浏览器支持 Brotli 压缩算法 ;
2) 又拍云 CDN 支持 Brotli ,通过响应头可以得知 CDN 边缘节点响应了一个 br 版本的资源文件,响应头内容为 Content-Encoding: br
3)原始资源文件大小为 702KB,通过 Brotli 压缩之后的大小变为了 225 KB,压缩比为 32.2%。
当然您也可以通过 Curl 命令行发起请求来进行测试,比如:
- Gzip 压缩
curl -vo /dev/null https://wuxuejun.charmelady.net/test.js -H "Accept-Encoding: gzip" -w "cost time: %{time_total}\n"
- Brotli 压缩
curl -vo /dev/null https://wuxuejun.charmelady.net/test.js -H "Accept-Encoding: br" -w "cost time: %{time_total}\n"
- 无压缩
curl -vo /dev/null https://wuxuejun.charmelady.net/test.js -w "cost time: %{time_total}\n"
关于 Brotli
Brotli 是由 Google 于 2015 年 9 月推出的无损压缩算法,它通过用变种的 LZ77 算法,Huffman 编码和二阶文本建模进行数据压缩,是一种压缩比很高的压缩方法。根据 Google 发布的研究报告,Brotli 具有如下特点:
1)针对常见的 Web 资源内容,Brotli 的性能要比 Gzip 好 17-25%;
2) Brotli 压缩级别为 1 时,压缩速度是最快的,而且此时压缩率比 gzip 压缩等级为 9(最高)时还要高;
3)在处理不同 HTML 文档时,brotli 依然提供了非常高的压缩率;
大多数的客户端浏览器都支持 Gzip 以及 Deflate,但是对 Brotli 的支持客户端也越来越多了,当前浏览器兼容情况如下:
截止 2017年 11 月 6日,全球客户端支持 Brotli 算法的比例达到了 70.79%,参见截图所示:
支持 Brotli 算法的浏览器支持的内容编码类型为 br , 通过 FireFox 开发者工具抓包可以获知,FireFox 浏览器的会发起这样的请求头内容:
Accept-Encoding:gzip, deflate, br
如果此时服务端(这里特指 CDN 边缘节点)支持 Brotli 算法,则会响应如下响应头:
Content-Encoding: br
如何使用?
和 Gzip 压缩特性一样,Brotli 免费开放给 CDN 平台的所有用户使用,并且该特性我们默认已经开启。这里需要说明的是,触发 Brotli 需要同时满足如下条件:
1) Content-Type 满足如下 MIME 列表:
text/plain
text/javascript
text/css
text/xml
text/x-component
application/javascript
application/x-javascript
application/xml
application/json
application/xhtml+xml
application/rss+xml
application/atom+xml
application/x-font-ttf
application/vnd.ms-fontobject
image/svg+xml
image/x-icon
font/opentype
text/html — default
2)Content-Length 大于 256 字节
3)客户端请求头需携带 Accept-Encoding: br
值得注意的是,并不是所有的浏览器都支持 Brotli 算法,所以在 CDN 边缘节点,我们同时会提供两种文件,一个是通过 Brotli 压缩的文件,一个原始资源文件。当然在客户端不支持 Brotli 算法时,我们也可以提供 Gzip 算法来压缩原始文件并提供给客户端。这里需要声明的是在客户端同时都支持 Brotli 和 Gzip 算法的情况下,我们会优先响应 br 版本的文件。
如果您还不是我们的用户,您可以免费试用我们的 CDN 服务,即可免费测试 Brotli。作为国内首家推出 Brotli 算法的 CDN 厂商,我们在为互联网用户提供良好的用户体验的同时,也会力求减少内容提供商的 CDN 采购成本。
参考文档:
1)https://en.wikipedia.org/wiki/Brotli
2)http://www.gstatic.com/b/brotlidocs/brotli-2015-09-22.pdf
3)http://caniuse.com/#feat=brotli