文本商谈
在如是说 Brotli 以后,先说呵呵 HTTP 文本商谈
有时,同一 URL 能提供更多第二份相同的文件格式,这就明确要求伺服器端和应用程序间有两个优先选择合适版的监督机制,这是文本商谈
HTTP的文本商谈的当中一类形式:伺服器端依照应用程序推送的允诺头中这类表头手动推送合适的版。能用作那个监督机制的允诺头表头又分三种:文本商谈专供表头(Accept 表头)、其它表头
表头情形,参见附注:
允诺头表头
表明
积极响应头表头
Accept
知会伺服器端哪种新闻媒体类别
Content-Type
Accept-Language
知会伺服器端哪种词汇
Content-Language
Accept-Charset
知会伺服器端哪种字符集
Content-Type
Accept-Encoding
知会伺服器选用哪种填充形式
Content-Encoding
比如应用程序推送以下允诺头:
Accept-Encoding:gzip,deflate,br
表示支持选用 gzip、deflate 或 br 填充过的资源
浏览器的积极响应头可能是这样的:
Content-Encoding: gzip
什么是 Brotli
从上面的文本了解到,我们控制使用填充的资源,除了有Gzip外,还有br,而那个br是我这里要说的 Brotli
Brotli is a generic-purpose lossless compression algorithm that compresses data using a combination of a modern variant of the LZ77 algorithm, Huffman coding and 2nd order context modeling, with a compression ratio comparable to the best currently available general-purpose compression methods. It is similar in speed with deflate but offers more dense compression.
Brotli 是基于LZ77算法的两个现代变体、霍夫曼编码和二阶上下文建模。Google软件工程师在2015年9月发布了包含通用无损数据填充的Brotli增强版,特别侧重于HTTP填充。当中的编码器被部分改写以提高填充比,编码器和解码器都提高了速度,流式API已被改进,增加更多填充质量级别。
与常见的通用填充算法相同,Brotli使用两个预定义的120千字节字典。该字典包含超过13000个常用单词、短语和其它子字符串,这些来自两个文本和HTML文件格式的大型语料库。预定义的算法能提升较小文件的填充密度。
使用Brotli替换Deflate来对文本文件填充通常能增加20%的填充密度,而填充与解填充速度则大致不变。
浏览器支持情形
Mozilla Firefox在Firefox 44中实现Brotli。Google Chrome从Chrome 49开始支持Brotli。Opera从Opera 36开始支持Brotli。安装与实用性过程
一、注意事项
本讲义适用作已经安装Nginx的情形,安装前,请先停止Nginx服务(不需要删除)。
本讲义需要网站实用性ssl证书。
本讲义需要安装宝塔面板,针对没有使用宝塔面板的用户可能不适用,但是安装和实用性逻辑能作为参考。
注意:该填充编码仅可用作 https 通信。
这次的讲义实践环境是CentOS 7,其它系统可能不适用!!!
ngx_brotli 包含两个模块:
ngx_brotli filter module – 用作动态填充积极响应体。ngx_brotli static module – 用作使用预填充的 .br 文件进行服务(静态站点)i
确保你安装了 git,如果没有,使用命令安装
yum -y install git
SSH软件连接到伺服器,然后执行如下命令,以下命令是进入 /www/server
cd /www/server
ngx_brotli,国内推荐使用国内镜像,稳定不出错,使用Github国内伺服器会出现clone失败或者没有进度。
国内伺服器:
git clone https://gitee.com/xlsw/ngx_brotli.git
国外伺服器
git clone https://github.com/google/ngx_brotli.git
上面的git命令是说把是把ngx_brotli放到了 /www/server 路径中,这样我们编译时候的路径是【/www/server/ngx_brotli 】
进入目录
cd ngx_brotli
升级 Brotli
git submodule update –init
返回主目录
cd
下图红线部分是上面输入的命令,能看下命令对应效果
三、下载新的nginx.sh
宝塔面板找到路径:/www/server/panel/install
删除nginx.sh文件,如图:
然后利用面板的远程下载新的就能了,地址如下
http://download.bt.cn/install/0/nginx.sh
四、查看自己的nginx版号
用命令来查看自己的nginx版号,这一这里的v是小写,命令如下:
nginx -v
记住自己的版,那个很重要。
五、修改nginx.sh
宝塔面板找到路径:/www/server/panel/install找到刚刚下载的文件nginx.sh 打开开始编辑。大概在273行,我们添加
–add-module=/www/server/ngx_brotli
不会添加看图,注意前后空格,–那个标识前面有两个空格,这是一组并列命令,其它命令怎么空的格,你就怎么空
就放在洛城放的那个位置吧。之后保存即可。
六、执行编译
之后回到ssh应用程序使用命令开始编译,依照自己的版,因为洛城这台伺服器安装的版是nginx1.18.0所以用编译命令如下:
sh /www/server/panel/install/nginx.sh install 1.18.0
如果你的版是1.18.0,那么是修改为1.18.0即可,诸如此类,是上面强调的你的版数字,两个字符都不要错,0也加上,安装完成之后,是下面的效果
然后我们使用命令:
nginx -V
注意这里的v是大写的。就能看到brotli已经编译成功了,如图:
我们看到brotli已经编译成功。
七、Nginx的全局实用性文件
如果检测安装正常的话,能开始实用性,打开路径
宝塔后台–软件管理–已安装–Nginx–设置–修改实用性
在gzip代码表头后面插入下面代码,如图,不懂的直接复制下面代码,别管我的实用性,懂的自己搞
brotli on;brotli_comp_level 6;brotli_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript image/svg+xml;
解释:(以下参数能自由实用性,上面为推荐)
brotli on; #启用brotli_comp_level 6; #填充等级,默认6,最高11,太高的填充水平可能需要更多的CPUbrotli_buffers 16 8k; #允诺缓冲区的数量和大小brotli_min_length 1k; #指定填充数据的最小长度,只有大于或等于最小长度才会对其填充。这里指定1kbrotli_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml text/html application/json image/svg application/font-woff application/vnd.ms-fontobject application/vnd.Apple.mpegurl image/x-icon image/jpeg image/gif image/png image/bmp; #指定允许进行填充类别brotli_static always; #是否允许查找预处理好的、以.br结尾的填充文件,可选值为on、off、alwaysbrotli_window 512k; #窗口值,默认值为512k
实用性完成保存之后能重启nginx,之后浏览器打开网站就能看到效果了
Brotli与GZIP能同时共存,当同时开启三种填充算法时,Brotli 填充等级优先级高于 Gzip。如果浏览器不支持brotli会用gzip形式填充,所以那个东东值得你拥有。