网站的访问速度是由多个因素所共同决定的,这些因素例如应用程序的响应速度、网络带宽、服务器性能、与客户端之间的网络传输速度等等。其中最重要的一个因素是应用程序本身的响应速度,因此当你为网站性能所苦恼时,你第一个需要着手进行处理的便是尽可能的提升应用程序的执行速度,你可以使用缓存或者是优化代码的执行效率来提升应用程序的速度。
网页压缩是一项由 WEB 服务器和浏览器之间共同遵守的协议,也就是说 WEB 服务器和浏览器都必须支持该技术,所幸的是现在流行的浏览器都是支持的,包括 IE、FireFox、Opera 等;服务器有 Apache 和 IIS 等。
什么是Gzip? Gzip是GNU zip的缩写,它是一个GNU自由软件的文件压缩程序。最早由Jean-loup Gailly和Mark Adler创建,用于UNIX系统的文件压缩。我们在Linux中经常会用到后缀为.gz的文件,它们就是Gzip格式的。现今已经成为Internet上使用非常普遍的一种数据压缩格式,或者说一种文件格式。HTTP协议上的GZIP编码是一种用来改进WEB应用程序性能的技术。大流量的WEB站点常常使用Gzip压缩技术来让用户感受更快的速度。这一般是指WWW服务器中安装的一个功能,当有人来访问这个服务器中的网站时,服务器中的这个功能就将网页内容压缩后传输到来访的电脑浏览器中显示出来。一般对纯文本内容可压缩到原大小的40%。
Gzip开启后有什么好处? 开启Gzip后会在网页数据传输之前,先使用Gzip压缩后再传输给客户端,客户端接收之后由浏览器解压显示。这样就会减小通过网络传输的数据量,提高浏览的速度。 
Gzip Web压缩工作原理 Web服务器处理HTTP压缩的过程如下: 1. Web服务器接收到浏览器的HTTP请求后,检查浏览器是否支持HTTP压缩(Accept-Encoding 信息); 2. 如果浏览器支持HTTP压缩,Web服务器检查请求文件的后缀名; 3. 如果请求文件是HTML、CSS等静态文件,Web服务器到压缩缓冲目录中检查是否已经存在请求文件的最新压缩文件; 4. 如果请求文件的压缩文件不存在,Web服务器向浏览器返回未压缩的请求文件,并在压缩缓冲目录中存放请求文件的压缩文件; 5. 如果请求文件的最新压缩文件已经存在,则直接返回请求文件的压缩文件; 6. 如果请求文件是动态文件,Web服务器动态压缩内容并返回浏览器,压缩内容不存放到压缩缓存目录中。
下面是两个演示图:

未使用Gzip:
未使用Gzip
开启使用Gzip后:
开启使用Gzip后
让我们开始吧!
  • 一、Tomcat服务器
如果您的 WEB 应用程序是跑在 Tomcat 服务器下的,而且直接使用 Tomcat 所提供的 HTTP 服务,那建议你马上动手,因为实在是太简单了,你只需要在 server.xml 配置文件中给 HTTP Connector 增加一个 compression 的参数值为 on 并重启 Tomcat 服务器就立刻生效,配置如下:
<Connector port="8080" protocol="HTTP/1.1" maxThreads="150" connectionTimeout="20000" redirectPort="8443" compression="on"/>
Tomcat 采用的是 HTTP/1.1 的 GZIP 压缩协议,它会根据浏览器送过来的请求中的 accept-encoding 值是否包含 gzip 来判断浏览器是否支持 gzip 压缩协议,如果浏览器支持就启用 gzip 压缩,否则就不进行任何压缩处理。Tomcat 中还有另外一个参数 compressableMimeType,这个参数可以用来指定压缩哪种类型的内容,例如可以指定该配置值为:text/html,text/plain ,则只压缩 contentType 为 text/html 和 text/plain 的页面,不过您最好也将 css 和 javascript 文件也算在压缩的文件类型中,因为这两者的压缩效果也十分的明显。

二、Apache 服务器 在 apache 1.3 版本,大家常用 mod_gzip 对输出内容进行压缩,现在主流的浏览器都支持 gzip 解压缩。在 apache2 下,这个模块换名为 mod_deflate,对应的模块文件名是mod_deflate.so下面我们介绍在 Windows 和 Linux 操作系统下如何启用并配置mod_gzip和mod_deflate模块。1、mod_gzip的启用 如果服务器开启了对Gzip组件的支持,那么我们就可以在http.conf或.htaccess里面进行定制,下面是一个.htaccess配置的简单实例:
  • # mod_gzip:
  • <ifModule mod_gzip.c>
  •  mod_gzip_on Yes 
  • mod_gzip_dechunk Yes 
  • mod_gzip_item_include file \.(html?|txt|css|js|php|pl)$ 
  • mod_gzip_item_include handler ^cgi-script$ mod_gzip_item_include mime ^text/.* 
  • mod_gzip_item_include mime ^application/x-javascript.* 
  • mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.* 
  • </ifModule>
 2、mod_deflate的启用
  1. # mod_deflate:
  2. <ifmodule mod_deflate.c>
  3.  DeflateCompressionLevel 6 #压缩率, 6是建议值. 
  4. AddOutputFilterByType DEFLATE text/plain 
  5. AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/xml AddOutputFilterByType DEFLATE text/css 
  6. AddOutputFilterByType DEFLATE text/javascript AddOutputFilterByType DEFLATE application/xhtml+xml
  7.  AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE application/rss+xml
  8.  AddOutputFilterByType DEFLATE application/atom_xml AddOutputFilterByType DEFLATE application/x-javascript
  9.  AddOutputFilterByType DEFLATE application/x-httpd-php AddOutputFilterByType DEFLATE image/svg+xml 
  10. </ifmodule>
3、对未开启mod_gzip和mod_deflate模块的虚拟主机的设置(如GoDaddy Deluxe Hosting – Linux) 
  GoDaddy Deluxe Hosting – Linux 空间不支持mod_gzip、mod_deflate模块,若想通过GZIP压缩网页内容,可以考虑两种方式,开启zlib.output_compression或者通过ob_gzhandler编码的方式。 zlib.output_compression是在对网页内容压缩的同时发送数据至客户端,ob_gzhandler是等待网页内容压缩完毕后才进行发送,相比之下godaddy使用后者效率更高,但需要注意的是,两者不能同时使用,只能选其一,否则将出现错误。   在默认情况下,zlib.output_compression是关闭的,如需开启需编辑php5.ini文件,加入以下内容:
  1. zlib.output_compression = On
  2.  zlib.output_compression_level = 6
  第2个参数的值从1到9,越大代表压缩率越大,一般设为6。Gzip功能会极轻微的加重服务器负担。 对于绑定了多个域名的godaddy主机,只需要设置一次即可,就是主机的总的根目录下的php5.ini。 将php5.ini上传到FTP根目录下,剩下的事请就是等待它生效,这可能需要一段时间,可以通过phpinfo()函数检测结果:
  1. Directive Local Value Master Value 
  2. zlib.output_compression On On 
  3. zlib.output_compression_level 6 6
当zlib.output_compression的Local Value和MasterValue的值同为On时,表示已经生效,这时候访问的PHP页面(包括伪静态页面)已经GZIP压缩了,通过Firebug或者在线网页GZIP压缩检测工具可检测到压缩的效果。 如果需要使用ob_gzhandler,则需关闭zlib.output_compression,把php5.ini文件内容更改为:
  1. zlib.output_compression = Off 
  2. zlib.output_compression_level = -1
ob_gzhandler是GoDaddy官网推荐的用法,通过在PHP文件中插入相关代码实现GZIP压缩,以下是GoDaddy帮助中心所提到的:
GZIP Compression Smaller pages load faster, regardless of your Internet connection speed. You can make your pages smaller by compressing them with GZIP. For more information about GZIP and our hosting, see Compressing Web Pages for Faster Load Times.
《Compressing Web Pages for Faster Load Times》文中提到,将以下PHP代码加入到PHP文件顶部,即可实现GZIP压缩。
 <?php if (substr_count($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip')) ob_start("ob_gzhandler"); else ob_start(); ?>
不管是zlib.output_compression还是ob_gzhandler,都仅能对PHP文件进行GZIP压缩,对于HTML、CSS、JS等静态文件只能通过调用PHP的方式实现,可以参照文章《加速blog:GZIP压缩传输你的文件》中的“静态文本调用PHP压缩模块实现GZIP压缩效果”。 最后想说的是,现在主流的浏览器默认使用的是HTTP1.1协议,基本都支持GZIP压缩,对于IE而言,假如你没有选中其菜单栏工具->Internet 选项->高级->HTTP 1.1 设置->使用 HTTP 1.1,那么,你将感受不到网页压缩后的速度提升所带来的快感!
经过我的测试,zlib.output_compression和ob_gzhandler这两种方式,godaddy空间使用ob_gzhandler方式,访问速度有明显的提高,前者效率很差。另外,有一种传说中没尝试过的方法。如下:  

ps:经测试下面方法中在linux空间起作用
给godaddy 开启网页GZIP压缩,速度传输提升50%。godaddy默认是支持Gzip的,修改你的程序即可实现。 Win空间: web.config文件加入代码:
<system.webServer> <urlCompression doStaticCompression="true" doDynamicCompression="true" /> </system.webServer>
Linux空间: .htaccess 加入代码:
<ifmodule mod_deflate.c> AddOutputFilterByType DEFLATE text/html text/css text/plain text/xml application/x-httpd-php application/x-javascript </ifmodule>

三、 IIS 服务器 
微软的 IIS 服务器同样也是目前用得最多的 WEB 服务器之一,而且用来运行 ASP 页面也是必不可少的。IIS6 本身支持 gzip 压缩,IIS5 就比较费劲了,你可以找一些第三方的组件来处理,不过这玩意是收费的。接下来我们介绍如何在 IIS6 中启用压缩功能。 打开 Internet 信息服务(IIS)管理器,右击”网站”->”属性”,选择”服务”。在 “HTTP压缩” 框中选中 “压缩应用程序文件” 和 “压缩静态文件”,按需要设置 “临时目录” 和 “临时目录的最大限制”,如下图所示:
接下来配置 gzip 组件,在 Internet 信息服务(IIS)管理器,点击 “Web 服务扩展”->”增加一个新的 Web 服务扩展…”,在 “新建 Web 服务扩展” 框中输入扩展名 “HTTP Compression”,添加 “要求的文件” 为 C:\WINDOWS\system32\inetsrv\gzip.dll,选中 “设置扩展状态为允许”,如下图所示:
\" \" 
还没完呢,我们还需要修改一个配置文件,修改之前请先停止 IIS 服务,打开 C:\Windows\System32\inetsrv\MetaBase.xml,这个文件很大,找到下面一段信息:
  1. <IIsCompressionScheme Location ="/LM/W3SVC/Filters/Compression/gzip" HcCompressionDll="%windir%\system32\inetsrv\gzip.dll" HcCreateFlags="1" HcDoDynamicCompression="TRUE" HcDoOnDemandCompression="TRUE" HcDoStaticCompression="TRUE" HcDynamicCompressionLevel="0" HcFileExtensions="htm html txt" HcOnDemandCompLevel="10" HcPriority="1" HcScriptFileExtensions="asp dll exe" > </IIsCompressionScheme>
    增加一些要进行压缩的文件后缀,其中 HcFileExtensions 是静态文件的扩展名,增加 js 和 css 等;HcScriptFileExtensions 为动态文件的扩展名,增加 aspx,保存后启动 IIS 即可生效。 最后我们介绍如何来测试前面所做的工作是否起效,你可能会觉得很奇怪,配置好了,用浏览器打开页面正常,查看页面源码,内容并没有变化,大小也跟原来一样,怎么回事呢?这是因为浏览器已经把内容解压了的结果,有两个方法来判断压缩是否生效:第一,查看 WEB 服务器的日志,不管是 Apache 或者是 IIS,二者的访问日志格式都差不多是下面这种格式:127.0.0.1 - - [14/May/2006:08:44:28 +0800] "GET /manual/style/css/manual.css HTTP/1.1" 200 19351 最后两个数字分别是 HTTP 的结果码(200 表示 OK),19351 表示的是响应内容的大小,把这个大小跟你在浏览器上查看源码的大小比较一下就可以知道是否生效。另外一种方法就是自己写一个 HTTP 客户端的小程序并设置 Accept-Encoding 的值为 gzip,deflate,由这个程序去请求服务器端的某个 URL 地址,然后打印出响应的内容,如果是一堆乱码,恭喜你,配置成功。下面是一段 Java 写的测试客户端代码(需要用到 commons-httpclient 包):
HttpClient http = new HttpClient(); String url = "http://www.dlog.cn/javayou"; GetMethod get = new GetMethod(url); try{ System.out.println("fetching url : "+ url); get.addRequestHeader("accept-encoding", "gzip,deflate"); int er = http.executeMethod(get); if(er==200){ System.out.println(get.getResponseContentLength()); String html = get.getResponseBodyAsString(); System.out.println(html); System.out.println(html.getBytes().length); } }finally{ get.releaseConnection(); }
利用GZIP压缩网页(Tomcat,apache,iis)各种方法总结 参考来自http://www.huacolor.com/ http://www.2cto.com/等