00:01
啊,那。那好,我们改完配置之后呢,先不要让它生效,那接下来呢,我们看看这个,呃,现在没改的时候,它是没没开启这个GC的时候,它是啥样。你在这儿呢,打开19244101。然后看一下,刷一下,再点点开注意看啊,嗯,GZ,它是在response header里边能够体现出来的,我们现在能看到的有content Les,对吧,然后它返回的信息比较少,呃,它这个content表示了我们现在当前这个页面,呃,或者这个content的这一部分啊,它究竟有多大,现在是7832个字节。现在是没有开启,那接下来呢,我们把它开启保存,然后呃,我们重新启动一下这个NG走。这会儿呢,你自己做实验的时候也可以这样啊,先不要刷新,你把它粘到另外一个这个标签页里,然后再访问它。你看它的差别在于哪啊?这呢,多了一个contentco,叫GZ。
01:04
对吧,然后下边还多了一个,呃,Very accept coding。啊,然后注意看这还多一个。大家对比一下。如果不明显的话呢,我可以把它给粘出来啊。这样。把它粘出来,我们看一看,嗯。找到咱这个笔记。就是没有配置的时候它是这样的,然后对比一下看看。拉过来。大家看,嗯。它这个区别在哪儿呢?你看嗯。Transfercoding对吧,这个是有的,在这儿呢,没有这个transfer encoding。是吧,然后这边还有一个这个,呃。
02:00
Content那框这也没有对吧,然后这个呃,这边呢,没有大小,大家注意看了吧,Content Les在我们没有压缩的时候呢,这边是有的,这边呢没有这个content论S,那接下来给大家解释解释啊,首先这个第一个刚才跟大家说的这个,呃,Content encoding,这指的就是我们当前的这份内容。它的这个压缩的格式是啥啊,我们现在启用的g zip啊,这压缩格式就是g zip,很明显的,我们现在返回的是一个g zip包,然后现在它的这个。啊,它的这个这个显示展示呢,也能正常的把我们解压缩正正常的展示出来,对吧,然后再看这。嗯。这个transfercoding。啊,这contentcoding transfercoding啊,Content指的是内容的呃压缩格式啊,然后这个transfer指的就是传输的压缩格式,原本呢,我们的传输,传输呢,并没有任何的这个呃,额外的这种呃变化对吧,就正常的把数据包发过来就可以了,这transfercoding后边加了一个T。
03:05
这个的意思就是,呃,把我们的这个数据包呢,它以一个一个的包来给我们发送过来啊,每一个单独的包呢,发送过来之后呢,单独的去啊,再给它解开,当最后发送的这个包是一个零字节大小的时候,那表示呢,所有的数据传输完了。这个transfercoding它对应的就是我们之前这个content Les啊,如果说我们在读取数据的时候,不知道这个数据的大小,那我在读的过程当中呢,就不知道什么时候是终止,对吧,在这标记了看,那我就读七八三十个字节啊,就代表我的内容呢,已经读完了。但如果要是没有看论次,我不知道读多长啊,那在你的这个传输协议的这个编码啊,在在这压缩编码的时候呢,加上纯K啊,也是一个道理,能实现相同的效果,所以说我不知道最终我要发送的这个数据包究竟有多大。
04:01
但是我最后给你发送一个额外的包啊,一个一个的单个的包给我发过来,最后那个包是零。啊,那最后这个包就表示我整个这个传输呢,啊,全部都结束了,那为啥它在这多了一个这个呃,Transfer coding呢,就是因为我们启用了g zip,当我们启用了GZP的时候,我们刚开始先请求到呃,这个我们的N几N几呢,这会就已经给我们生成好了response header,但是这份数据还没有给我们准备好,他也不知道。啊,这份数据进率有多大,因为我们的N几个词在内部呢,它是纯粹的异步响应式的啊,他一步一步来的,他先把这个hier给准备好了,然后开始去请求内容帮我们去压缩啊,然后最后呢,把这两个合并到一块,最后我们发过来,这主要就是因为。一步导致他不知道啊,咱们这个究竟最终发送过来这个内容它就有多大,如果要是压缩这份数据特别大,那其压缩的过程呢,也是特别耗时的是吧?啊,所以我先把这个海角给你发过来,你先看对吧,然后你再慢慢的再去读嘛,因为你也没读完,我也没压完。
05:05
啊,这是这个transfer,呃,Coding啊,这是它的这个我们返回几个投进机,还有这个very,这个very啊是我们在配置的时候。多加了这么一个配置。在这儿。嗯。这j zep啊,Very on配了它之后呢,它会给我们额外发这么一个头啊,就多了这么一个东西,这个啊,一般来说我们不需要配,这都是给这个比较low的浏览器使用的,但是你配上呢,也无所谓,就无外无,这无外乎啊,就多了一个这个通信息而已。这是我们配置好的这个GZP啊,那在我们这个浏览器这一端啊。其实还有很多这个其他的功能,比如说你看看这浏览器它究竟支不支持,比如我现在看这个当前版本的Chrome,它支持哪些压缩算法,你可以点一下注意看这呢,有一个这个WiFi这个小图标,你点完之后在下边儿你看有这么几个选项。
06:03
呃,你看这啊,这accepted content coding啊,就是可以接受的这个,呃,内容的这个编码压缩格式在这勾的是use use browse browser default,使用浏览器默认设置,你把它勾掉之后呢,我们可以用这三种压缩算法。嗯。这叫什么?是吧?这种压缩算法啊,它还是最早出现在这个阿帕奇HDDBD上的,现在NG算基本上看不见这种压缩算法啊,第二种呢,就是我们现在见到这个JZ法。还有第三种就是B2,这是这个谷歌的这个,呃,额外的这个压缩算法是吧,然后除了这个我们可以去选择,在调试的时候啊,可以选择这个它是否支持这个GZ。额外呢,在这里边还有另外一个功能,就是可以模拟这个慢网络啊,你比如说在这呃,这个network,这个这这个network呃。
07:04
对吧,啊这么读吧。在这个选项卡里边呢,我们可以去选择一下这个模拟当前网络这个情况,比如说我们现在可以让它变成3G网络,那它。这个展示的速度肯定就比较慢了,你再刷新一下。你看访问请求的速度就比较慢了,需要挺长时间在这儿可以模拟这个慢网络啊。还可以这个直接让它离线啊,有时候我们测试一些缓存的时候呢,你可以把它这设置成离线啊,这是这个额外的一些调试工具。呃,那么我们接下来啊,仔细看看,研究研究这几个配置选项,它都都它它这个它都究竟是什么意思。首先我们先看第一个啊,就是g zip on,这就表示呢,我们现在把这个GZ这个功能给它打开了,默认情况下它是不支持这个,呃,不是,它是默认没有开启这个g zip这个选项的。这具体的解释呢,我们在这个文档里边已经都给大家记了啊啊,这是j zip on,然后再看这个j zip buff。
08:01
这个buff,这代表我们在N几内存当中压缩的过程当中呢,我使用多少的内存缓冲,呃,来压缩你的这个,呃压缩包啊,前面这个十六指的是用多少个内存缓冲块,每一个块的大小是多大,是8K。这个嗯。根据我们操作系统的,呃,这个不同来具体的去配置,主要是看你CPU的这个啊,是32位的还是64位的,如果要是32位的话。那你在这这个默认的,默认它的配置大小啊,或者说你这个建议的配置大小就是32个4K的,如果你是64位的操作系统和CPU,那这呢,最好建议大家配这个,呃,十十六个8K的。呃,这是根据操作系统的不同啊,我们可以去选择去配置,然后看下边这个叫g zip,呃。
09:00
嗯,Cup cup a level,这相当于是压缩时候,这个我们去选择一下压缩等级,这个呢可以配置数字啊,一到九都可以,一呢就代表基本不压缩,你像我们用2A2的时候。有一种压缩方式叫打包,那基本上就不太会去压缩这个数据,压缩等级越低,那么它压缩速度就越快,相对来说解压缩速度也就越快,那么压缩比那也就这个这个越小,也就是比如原本呢,我一兆大小的文件,如果这设置成一了呢,可能压完之后呢,变成了900K啊,没压出来多少东西,如果换成了九,那么这个压缩比就比较高了,那一兆的东西呢,可能我说的是可能啊,真的不同的文件压缩,压缩出来的这个压缩比也是不一样的。呃,一兆的文件呢,有可能呢,它可以压缩压缩出来。变成了200K大小,这就是压缩比比较高,相对来说对CPU的损耗也会比较高。啊,那传输的时候这个数据包呢,它就比较小,一般来说呢,配置呃,123456这几个都可以,你别配置太高了,对这个服务器上的这个CPU的这个消耗呢,就会比较大。
10:12
然后再看下边这个配置,就g zp http version,这代表是呃,支持的最低的HTP的版本号,那现在的主流浏览器一般来说都是基于HTTP1.1协议以及以上的啊,现在浏览器呢,大多数主流浏览器都支持HTp1.12.0啊,甚至还有少部分的这种试验版本呢,支持这个3.0的HTP协议了。是吧,这个可配可不配,它默认的就是一对一啊。然后再看这个叫g zip meanin Les啊,这也比较好理解,这就是在压缩的时候,嗯。针对于这个返回的数据文件啊,嗯,最小啊是多少啊。这个大于这个值的,那么我就开始压缩,如果小于这个值的呢,就不压缩了,我直接传给你就完了。啊嗯,这个配置啊,建议不要配置的过于小啊,现在这个是嗯,256啊,这这其实就不大了啊。
11:08
嗯,一般来说1K1K2K5K啊,这这这都可以。这个呢,这个配置啊叫proceed proceed啊这G这proceed这个置选项呢,有网上有很多帖子解释的都并不是特别明白,在这儿呢,我给大家嗯,好好解释解释,其实呢,它比较好理解,这就是在呃,我们作为反向代理服务器的时候,你看现在我们这种情况就是作为反向代理服务器。这会儿呢,可以配置一些额外的信息,那有两种配置呢,比较常见,一个是off。一个是any啊,当它是off的时候啊,它就是不做任何的限制啊,相当于这个选项呢,我就把它给关了,当它是any的时候呢,啊,它是也是不做任何限制,任何这个呃,任何请求我都给它压缩啊,针对于这个,呃,上游服务器的一些这个头信息可以去判断的,呃,这些条件啊,比如这些我不管是什么,我全部都给它压缩,就是无条件的去启用这个压缩。
12:11
这两个一个是any,一个是off,这俩呢,基本上效果它是一样的,当它不是any和off的时候,这里边可以配置多个选项,你看啊,No catch noto和private。啊,No last more啊no t,还有这O。这些这个配置选项呢,它表明了两种呃这个不同的这种信息,一种呢是针对于呃上游服务器返回的header当中。带有这个缓存相关的这些header,它是给浏览器看的啊,另外一个呢,就是这个O和权限相关的。啊,针对于不同的上游浏览器返回的不同的header,那么我们来决定是否对于上游服务器返回的数据呢进行压缩,注意啊,它是针对于反向代理才生效,我们现在呢,正好是反向代理,如果他不不作为反向代理,只作为这个静态文件存储啊转发这一会儿呢,啊,这个选项其实没有用的啊,就你配了配,其实他也没有效果,它只对于这个反应代理服务器呃生效,再跟大家总结一下,就这个配置选项呢,它比较。
13:20
难理解,因为这个官方文档解释的不清楚,网上很多文章解释的也不清楚,它主要就是针对于这个反应代理服务器。呃,才可以配置,或者说才有意义,另外就是它是针对于上游服务器返回这个header来做条件性的这种,呃,这种配置一般来说啊,在这儿呢,我们也不配这个东西啊,或者配了之后呢,我们配一个any啊就可以了啊在这呢,我也不需要试了,你你试试你不配它或者把它关了,同样这个反向代理的时候呢,它也会把这个所有的这个数据呢给我们压缩了。啊,只是当你不是off或者是any的时候呢,可以根据条件去选择是否启用压缩啊。
14:01
那么这个压缩和这个catch相关这些信息,呃,另外有一层意义就是有很多时候我们这个catch住的这些,呃数据呢,它是存在浏览器上的啊,一般来说已经启用了catch之之后的这些数据在传输的时候都已经经过压缩了,或者说不需要再次压缩了啊,所以这会儿呢,我们就可以把这个某些这个细节上,我们就可以去做一些调整,但一般来说我们不调整这个。这个这个这个啊。然后再看下一个,这是GZ,呃,Very啊,这刚才跟大家说了,它只是在呃HTP头上呢,多了这么一个呃信息啊,就是我们再看一下在这。这个very accept encoding,如果你把这个very给它off了啊,把它给关掉了,那就没有这个投进器了,这个可配可不配,现在一般浏览器也不需要配这东西啊,下边这个呢,是。嗯,G zip types,这指的就是我们针对于哪些呃文件,或者说哪些这个呃imme类型的文档去做,呃这个GCP压缩,这有两个配置啊,一个是比较长的,也比较短的,针对于你自己的这个情况,你去选择配置,这个比较短的呢,它只是包含了你像tax plan,这就是一般的文本文档啊,还有这个application,呃,X javascript针针对于这个javascript相关的,还有这个CSS相关的,和S相关的。
15:35
这几种类型呢,我们去给它启动压缩,这就是比较全的了,大家看一下啊,这第一个呢,这整行啊,都是和这个文本文档HTMLXML相关的啊。第二个呢是javascript啊相关的,第三个呢是Jason相关的,你看这里边就没有Jason,也就是你返回的这个Jason数据,它本质上它也是文文本数据,但它的响应头mm me类型,它肯定不是tax plan对吧。
16:02
那针对于Jason数据呢,我们可以这么去配对吧,这是CSS相关的啊,然后这是。字体相关的有很多时候我们这个网站,尤其是对浏览器的这个,呃,前端设计的时候啊,他可能会下发一些自己自定义的一些字体,来展示这个当前页面的一些效果。啊,那这个字体呢,其实它也是可以压缩的啊,在传输的过程当中啊,然后还有就是icon,这icon就是咱们当前这个站点没有啊,也有这就这个小猫,大家看了吗?在这个标签页上,这个Tom cat这个小猫,这就是icon,那针对icon要不要做压缩,其实没有必要,因为icon每一个都比较小。这是j types啊嗯,这个建议大家啊,针对你当前系统呢,你单独的去多配一些啊,因为你少配了它就不压缩了。再看下一个呢,就是这个g zip disable这个配置选项指的是我针对于哪些浏览器关掉及Z这个功能啊,你看这默认选项就是Miss IE Miss IE系列一到66.0版本以下的IE简直就是病毒是吧,那这个。
17:12
I呢,就把它给关掉。但是啊,在这儿呢,多跟大家说一次,就是这个配置选项呢,一般来说我建议大家不要配这种东西,因为这很明显它是一个正则表达式是吧?正则表达式在我们这种高性能服务器,尤其是呃,有高并发请求的这些节点上,你像这个GZ,这绝对是每一个请求都会经历一下GZP了,那都得去匹配一下这个正则,对于服务器来说呢。这个性能消耗是指数级上升的,尤其你的正则写的越复杂,它的这个性能消耗也就越大,所以一般建议不配这个,呃,Disable啊,或者说。呃,宏观一点讲啊,建议大家不要开启,呃,这就尽量不要在这个配置文件里出现这个正则表达式,包括在location里面,如果能够直接直接最小匹配,直接匹配上,这是最好,千万尽量少用正子的啊,这是影响性能的一个选项。
18:06
那么这些呢,就是呃,咱们这个g zip的一些配置选项,那在这呢,额外再给大家多说一嘴,就是g zip啊。我们现在呢,已经把它给打开了,现在打开的这种方式叫动态压缩方式,也就是所有的请求请求到我的服务器的后端,那么我全都会经历一次压缩。然后这种压缩方式它有一个致命的缺点,这个缺点就是它无法再使用我们NG的一个高级特性,就是那个s file。那个send file,它是针对于本地磁盘文件的,大家要知道我磁盘上有一个文件对吧,我开启了send file,数据零拷贝,直接一个信号发送给我的内核,内核直接从磁盘上找到这个文件,不经过用户态,也就不会加载到NG的内存里边,而直接通过网络接口也或者网卡的驱动,直接把这份数据就给传出去了。3FAIR一旦要开了啊,传输速度是非常高的啊,因为少一次内存拷贝嘛,但如果你要开了这个动态的GZ也是我们现在的默认配置。
19:07
人一旦要开了这个G之后,那个send file就无效了啊,就再也无法使用那个S这个技术了。呃,但是呢,我们还是特别期望使用一下GGZ法啊,不管怎么说,可能我们还没搞明白为什么要用,但是呢,很多网站都在用这个GZ法,那究竟是为啥他们还在用,放弃了S吗?这肯定不是,对吧?究竟是为什么呢?因为还有另外一种方式叫静态压缩方式,就是把我们的这个需要请求的这些。呃,这些这些资源呢,我事先准备好放在磁盘上,然后再去send file直接给你扔过去啊,这是静态压缩,那么下节课给大家来讲这个静态压缩啊。
我来说两句