你真的了解网站开发中的 GZIP 吗?

gzip是GNUzip的缩写,最早用于UNIX系统的文件压缩。HTTP协议上的gzip编码是一种用来改进web应用程序性能的技术,web服务器和客户端(浏览器)必须共同支持gzip。目前主流的浏览器,Chrome,firefox,IE等都支持该协议。常见的服务器如Apache,Nginx,IIS同样支持gzip。gzip压缩比率在3到10倍左右,可以大大节省服务器的网络带宽。而在实际应用中,并不是对所有文件进行压缩,通常只是压缩静态文件。

那么客户端和服务器之间是如何通信来支持gzip的呢?通过图1我们可以很清晰的了解。

图1 gzip工作原理图

1)浏览器请求url,并在request header中设置属性accept-encoding:gzip。表明浏览器支持gzip。

2)服务器收到浏览器发送的请求之后,判断浏览器是否支持gzip,如果支持gzip,则向浏览器传送压缩过的内容,不支持则向浏览器发送未经压缩的内容。一般情况下,浏览器和服务器都支持gzip,response headers返回包含content-encoding:gzip。

3)浏览器接收到服务器的响应之后判断内容是否被压缩,如果被压缩则解压缩显示页面内容。

下面以淘宝为例,验证一下开启gzip的效果。客户端(浏览器)请求http://www.taobao.com/。本次测试使用的浏览器为Chrome,打开控制台查看网络信息可以看到request headers中包含:accept-encoding:gzip, deflate, sdch,表明chrome浏览器支持这三种压缩。这里值得一提的是accept-encoding中添加的另外两个压缩方式deflate和sdch。deflate与gzip使用的压缩算法几乎相同,这里不再赘叙。sdch是Shared Dictionary Compression over HTTP的缩写,即通过字典压缩算法对各个页面中相同的内容进行压缩,减少相同的内容的传输。sdch是Google推出的,目前只在Google Chrome, Chromium 和Android中支持。图2为浏览器发送的request header。图3为服务器返回的response header。

 图2 淘宝request header

图3 淘宝response header

通过图2以图3很明显可以看出网站支持gzip,那么当支持gzip之后,压缩效率如何体现呢?通常浏览器都有现成的插件检测gzip压缩效率,如firefoxd的YSlow插件,我这里使用了网站http://gzip.zzbaike.com/做了检测。检测结果如图4所示:

图4 淘宝gzip检测结果

很明显可以看出,通过使用gzip,静态文件被压缩了80.5%,极大的节省了服务器的网络带宽,这对于访问量巨大的淘宝来讲节约的流量非常可观。

在企业级应用中,通常被使用到的服务器有nginx,Apache等。nginx是取代Apache的高性能服务器,本文接下来的内容会介绍一下在Nginx中如何开启gzip。

NGINX中开启GZIP:

如果服务端接口使用nodejs和express,那么开启nginx非常简单。启用 compress() 中间件即可并在nginx.conf中添加gzip配置项即可,express.compress() gzip压缩中间件,通过filter函数设置需要压缩的文件类型。压缩算法为gzip/deflate。这个中间件应该放置在所有的中间件最前面以保证所有的返回都是被压缩的。如果使用java开发,需要配置filter。

下面详细介绍一下如何在nginx.conf中配置gzip。此次我配置的gzip参数如图5所示:

图5 gzip参数

添加完参数后,运行nginx –t检查一下语法,若语法检测通过,则开始访问url检测gzip是否添加成功。以下为我所使用的gzip配置的作用。

1) gzip on:开启gzip。

2) gzip_comp_level:gzip压缩比。

3) gzip_min_length:允许被压缩的页面最小字节数。

4) gzip_types:匹配MIME类型进行压缩,text/html默认被压缩。

检测GZIP是否开启

如果没有现成的项目代码,这里提供一个比较简单的检测方式。首先在本地安装nginx,在nginx默认目录下面添加了两个静态文件bootstrap.css、bootstrap.js。

OS X系统的默认路径为:/usr/local/Cellar/nginx/1.10.2_1/html,Windows系统直接复制文件到文件夹下面。

拷贝文件指令可参考:cp -r bootstrap.js /usr/local/Cellar/nginx/1.10.2_1/html,在nginx的默认成功跳转页面index.html引入这两个静态文件。index.html页面内容如图6所示。

图6 index.html

做好这一切的准备工作之后,浏览器输入http://localhost:8080/。出现如图7所示页面表明nginx启动成功。

 图7 nginx启动成功界面

此时打开Chrome控制台,可以看到network信息,response headers中返回了content-encoding:gzip,表明gzip开启成功。gzip未开启前network信息如图8所示,开启后返回network信息如图9所示,url请求的headers报文如图10所示。

图8 gzip开启前控制台信息

图9 gzip开启成功后控制台信息

图10 gzip开启成功后headers报文

对比以上三图可以看出gzip压缩效率非常高,且经过压缩后静态文件大小不到原来的五分之一。这里值得一提的是静态资源文件越大,gzip的压缩效率越高。所以对于静态资源量非常大的网站,开启gzip可节省大量流量,而同时gzip的应用远不止提高web性能,Android,IOS底层网络请求同样可用。

via:北京网站建设

时间: 2025-01-02 01:04:35

你真的了解网站开发中的 GZIP 吗?的相关文章

网站开发中, php所扮演的角色,以及与其他语言,工具或库的关系,这个问题很重要

问题描述 网站开发中, php所扮演的角色,以及与其他语言,工具或库的关系,这个问题很重要 网站开发中, php所扮演的角色,以及与其他语言,工具或库的关系,这个问题很重要 解决方案 php是一种web脚本语言,它主要用来编写应用层.web应用层需要iis或者apache这样的web服务器去执行.只使用php其实也可以开发一个完整的服务器端程序了.如果你希望一部分业务放在客户端执行,那么需要用js脚本.如果你希望调用一些别的语言的库,或者出于性能的优化,可以用C++写dll,用php模块加载.

PHP网站开发中常用的8个小技巧

 这篇文章主要介绍了PHP网站开发中常用的8个小技巧,本文讲解了命名.使用.PHP判断Form表单是否提交.PHP 获取字符串长度.PHP超全局对象等内容,需要的朋友可以参考下     PHP是一种用于创建动态WEB页面的服务端脚本语言.如同ASP和ColdFusion,用户可以混合使用PHP和HTML编写WEB页面,当访 问者浏览到该页面时,服务端会首先对页面中的PHP命令进行处理,然后把处理后的结果连同HTML内容一起传送到访问端的浏览器.但是与ASP或 ColdFusion不同,PHP是一

关于网站开发中浏览器兼容性问题

中介交易 SEO诊断 淘宝客 云主机 技术大厅 网站开发中,对于前端工程师而言,网站样式的兼容性往往很让人头疼,特别是在本国国情的情况下,IE6的不死以及各家IT公司的浏览器兼容性存在差异的情况下,让网站开发在浏览器兼容性方面摔了大跟头. 开发人员往往会看到一些比较好的值得我们借鉴的国外网站,但是一拿到本地,各种浏览器的不兼容,迫使我们放弃这些华丽的好站.今天我来给大家解析下市场的各种浏览器以及我们在网站开发当中值得注意的地方. 先说主浏览器,目前国内主浏览器依旧以IE为主,那么IE6.7.8其

新手入门:PHP网站开发中常见问题汇总

PHP网站开发 动态网页制作PHP PHP教程 PHP技巧 PHP网站开发常见问题 [1]页面之间无法传递变量 get,post,session在最新的php版本中自动全局变量是关闭的,所以要从上一页面取得提交过来得变量要使用$_GET['foo'],$_POST['foo'],$_SESSION['foo']来得到 当然也可以修改自动全局变量为开(php.ini改为register_globals = On):考虑到兼容性,还是强迫自己熟悉新的写法比较好. [2]Win32下apache2 用

B/S网站开发中缓存应用

关于中大型开发b/s开发中的缓存(cache),我的一些看法,有不正确的或者是有笔误的地方,请指正.thanks 首先,应该了解基本的,对于缓存的知识: Q:如:静态缓存和动态缓存的区别?缓存是什么? A:缓存,在某个方面简单的说,就是无需与数据库再次交互. 静态缓存: 即所说的html,shtml文件. 动态缓存:即所说的把缓存存于服务器的内存中,需要时调用. 他们的区别在哪呢? 静态缓存不用占用负载(服务器的内存),但需要占用服务器的空间(因为生成很多文件),最重要的,是因为生成了静态的缓存

PHP网站开发中与AJAX的结合

AJAX无疑是2005年炒的最热的Web开发技术之一,当然,这个功劳离不开Google.我只是一个普通开发者,使用AJAX的地方不是特别多,我就简单的把我使用的心得说一下.(本文假设用户已经具有JavaScript.HTML.CSS等基本的Web开发能力) [AJAX介绍] Ajax是使用客户端脚本与Web服务器交换数据的Web应用开发方法.Web页面不用打断交互流程进行重新加裁,就可以动态地更新.使用Ajax,用户可以创建接近本地桌面应用的直接.高可用.更丰富.更动态的Web用户界面. 异步J

PHP网站开发中常用的8个小技巧_php实例

PHP是一种用于创建动态WEB页面的服务端脚本语言.如同ASP和ColdFusion,用户可以混合使用PHP和HTML编写WEB页面,当访 问者浏览到该页面时,服务端会首先对页面中的PHP命令进行处理,然后把处理后的结果连同HTML内容一起传送到访问端的浏览器.但是与ASP或 ColdFusion不同,PHP是一种源代码开放程序,拥有很好的跨平台兼容性.用户可以在Windows NT系统以及许多版本的Unix系统上运行PHP,而且可以将PHP作为Apache服务器的内置模块或CGI程序运行. 本

网站开发中用户体验的要素

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 周末看了一本书,号称:本书是AJAX之父的经典之作. 书本介绍:本书用简洁的语言系统化地诠释了设计.技术和商业融合是最重要的发展趋势.全书共8章,包括关于用户体验以及为什么它如此重要,认识这些要素.战略层.范围层.结构层.框架层.表现层以及要素的应用.看过之后,略有失望,大面积的书面六百和多余的图示,加上拗口的翻译,我觉得对不起他的宣传还有价

实例讲解PHP网站开发中Session的使用方法

  PHP会话即SESSION是指用户从进入网站到关闭网站这段时间内活动的一种机制,它提供了所有网页都共同使用的公共变量存贮机制.那么SESSION到底有什么用处呢?网上购物时大家都用过购物车,你可以随时把你选购的商品加入到购物车中,最后再去收银台结帐.在整个过程中购物车一直扮演着临时存贮被选商品的角色,用它追踪用户在网站上的活动情况,这就是SESSION的作用.    SESSION的发明填补了HTTP协议的局限,HTTP协议被认为是无状态协议,当它在服务端完成响应之后,服务器就失去了与该浏览