关于HTTP传输中gzip压缩的秘密探索分析

  

  

网页加载速度加快的好处不言而喻,除了节省流量,改善用户的浏览体验外,另一个潜在的好处是Gzip与搜索引擎的抓取工具有着更好的关系,例如谷歌就可以通过直接读取Gzip文件来比普通手工抓取更快地检索网页。在谷歌网站管理员工具(Google网站管理员工具)中你可以看的到,sitemap.xml。广州是直接作为站点地图被提交的。
  

  

而这些好处并不仅仅限于静态内容,PHP动态页面和其他动态生成的内容均可以通过使用Apache压缩模块压缩,加上其他的性能调整机制和相应的服务器端缓存规则,这可以大大提高网站的性能,因此,对于部署在Linux服务器上的PHP程序,在服务器支持的情况下,我们建议你开启使用Gzip Web压缩。下面来一起看看详细的介绍吧。

  

  

关于HTTP传输中gzip压缩的秘密探索分析“> <br/>
  </p>
  <p>我们给某人发送邮件时,我们在传输之前把自己的文件压缩一下,接收方收到文件后再去解压获取文件。这中操作对于我们来说都已经司空见惯。我们压缩文件的目的就是为了把传输文件的体积减小,加快传输速度。我们在http传输中开启gZip的目的也是如此,但是一般文章介绍gZip时候总是结合一些服务端配置(nginx)或者构建工具插件(webpack)来说,列出一大堆配置让人看的云里雾里,以至于到最后还没搞懂为什么用,怎么用这些问题。</p>
  <p> <br/>
  </p>
  <p>我们下面去探讨一下这些问题</p>
  <p> <强> gZip文件怎么通讯</强> </p>
  <p>我们传输压缩文件给别人时候一般都带着后缀名. rar, . zip之类,对方在拿到文件后根据相应的后缀名选择不同的解压方式然后去解压文件。我们在http传输时候解压文件的这个角色的扮演者就是我们使用的浏览器,但是浏览器怎么分辨这个文件是什么格式,应该用什么格式去解压呢? </p>
  <p>在http/1.0协议中关于服务端发送的数据可以配置一个内容编码字段,这个字段用于说明数据的压缩方法</p>
  
  <pre类=   内容编码:gzip   内容编码:压缩   内容编码:缩小      

客户端在接受到返回的数据后去检查对应字段的信息,然后根据对应的格式去做相应的解码。客户端在请求时,可以用接受编码字段说明自己接受哪些压缩方法。

        接受编码:gzip,缩小      

我们在浏览器的控制台中可以看到请求的相关信息

  

关于HTTP传输中gzip压缩的秘密探索分析

  

<强>兼容性

  

提到浏览器作为一个前端就不由自主的会想一个问题,会不会有浏览器不支持呢.北京/1.0是1996年5月发布的。好消息是基本不用考虑兼容性的问题,几乎所有浏览器都支持它。值得一提的是ie6的早起版本中存在一个会破坏gZip的错误,后面ie6本身在WinXP SP2中修复了这个问题,而且用这个版本的用户数量也很少。

  

<强>谁去压缩文件

  

这件事看起来貌似只能服务端来做,我们在网上看到最多的也是诸如nginx开启gZip配置之类的文章,但是现在前端流行温泉应用,用反应,vue之类的框架时候总伴随这一套自己的脚手架,一般用webpack作为打包工具,其中可以配置插件如compression-webpack-plugin可以让我们把生成文件进行gZip等压缩并生成对应的压缩文件,而我们应用在构架时候有可能也会在服务区和前端文件中放置一层节点应用来进行接口鉴权和文件转发.nodejs中我们熟悉的表达框架中也有一个压缩中间件,可以开启gZip、一时间看的人眼花缭乱,到底应该用谁怎么用呢?

  

服务端响应请求时候压缩

  

其实nginx压缩和节点框架中用中间件去压缩都是一样的,当我们点击网页发送一个请求时候,我们的服务端会找到对应的文件,然后对文件进行压缩返回压缩后的内容【当然可以利用缓存减少压缩次数】,并配置好我们上面提到的内容编码信息。对于一些应用在构架时候并没有上游代理层,比如服务端就一层节点就可以直接用自己本身的压缩插件对文件进行压缩,如果上游配有有nginx转发处理层,最好交给nginx来处理这些,因为它们有专门为此构建的内容,可以更好的利用缓存并减小开销(很多使用c语言编写的)。

  

我们看一些nginx中开启gZip压缩的一部分配置

     

关于HTTP传输中gzip压缩的秘密探索分析