一、gzip介绍

Gzip是一种流行的文件压缩算法,如今的应用十分广泛,尤其是在Linux平台。当应用Gzip压缩到一个纯文本文件时,效果是很明显的,大约能够降低70%以上的文件大小。这取决于文件里的内容。 利用Apache中的Gzip模块,我们能够使用Gzip压缩算法来对Apacheserver公布的网页内容进行压缩后再传输到client浏览器。这样经过压缩后实际上降低了网络传输的字节数,最明显的优点就是能够加快网页载入的速度。

网页载入速度加快的优点不言而喻,除了节省流量,改善用户的浏览体验外,还有一个潜在的优点是Gzip与搜索引擎的抓取工具有着更好的关系。

二、Webserver处理

HTTP压缩的步骤例如以下:

Webserver接收到浏览器的HTTP请求后,检查浏览器是否支持HTTP压缩(Accept-Encoding 信息);

假设浏览器支持HTTP压缩,Webserver检查请求文件的后缀名;

假设请求文件是HTML、CSS等静态文件,Webserver到压缩缓冲文件夹中检查是否已经存在请求文件的最新压缩文件;

假设请求文件的压缩文件不存在,Webserver向浏览器返回未压缩的请求文件,并在压缩缓冲文件夹中存放请求文件的压缩文件;

假设请求文件的最新压缩文件已经存在,则直接返回请求文件的压缩文件;

假设请求文件是动态文件,Webserver动态压缩内容并返回浏览器,压缩内容不存放到压缩缓存文件夹中。

三、开启Gzip

Apache利用Gzip压缩算法进行压缩的模块有两种:mod_gzip 和mod_deflate。

如今浏览器本身也自己主动Gzip压缩功能,支持Accept-Encoding: gzip,deflate ,这里我在firefox浏览器下測试。

通过查看HTTP头,我们能够高速推断使用的client浏览器是否支持接受gzip压缩。

若发送的HTTP头中出现以下信息,则表明你的浏览器支持接受对应的gzip压缩:

Accept-Encoding: gzip 支持mod_gzip

Accept-Encoding: deflate 支持mod_deflate

Accept-Encoding: gzip,deflate

同一时候支持mod_gzip 和mod_deflate Apache内置有mod_deflate模块来启用gzip功能,但假如安装apache的时候没有编译相关模块,就须要你手动安装一次,以启用它:

首先到你的apache源代码文件夹,查找到mod_deflate.c文件 ,通常位置:apachehttpd源代码文件夹/modules/filters/mod_deflate.c,进入上面找到的文件夹执行以下的命令:

/usr/local/apache2/bin/apxs -i -c -a mod_deflate.c

注:apxs文件夹请參照您自己的机器,通常在apache安装文件夹的bin文件夹下。

安装完毕,到apache的modules文件夹看看是不是有了mod_deflates.so,httpd.conf中打开deflate_Module和headers_Module模块:

LoadModule deflate_module modules/mod_deflate.so

载入mod_deflate.so模块,默认安装会自己主动写入httpd.conf。

假设server开启了对Gzip组件的支持,那么我们就能够在http.conf定制文件压缩,以下是一个配置的简单实例:

1、mod_gzip方式

# 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、deflate_Module方式

(1)严格匹配文件类型

# mod_deflate:

<ifmodule mod_deflate.c>

DeflateCompressionLevel 6 #压缩率, 6是建议值.

AddOutputFilterByType DEFLATE text/plain

AddOutputFilterByType DEFLATE text/html

AddOutputFilterByType DEFLATE text/php

AddOutputFilterByType DEFLATE text/xml

AddOutputFilterByType DEFLATE text/css

AddOutputFilterByType DEFLATE text/javascript

AddOutputFilterByType DEFLATE application/xhtml+xml

AddOutputFilterByType DEFLATE application/xml

AddOutputFilterByType DEFLATE application/rss+xml

AddOutputFilterByType DEFLATE application/atom_xml

AddOutputFilterByType DEFLATE application/x-javascript

AddOutputFilterByType DEFLATE application/x-httpd-php

AddOutputFilterByType DEFLATE image/svg+xml

AddOutputFilterByType DEFLATE image/gif image/png  image/jpe image/swf image/jpeg image/bmp

# Don’t compress images and other  #排除不须要压缩的文件

BrowserMatch ^Mozilla/4 gzip-only-text/html

BrowserMatch ^Mozilla/4\.0[678] no-gzip

BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

SetEnvIfNoCase Request_URI .(?:html|htm)$ no-gzip dont-varySetEnvIfNoCase

#SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary

SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary

SetEnvIfNoCase Request_URI .(?:pdf|doc)$ no-gzip dont-vary

</ifmodule>

(2)过滤文件类型

# mod_deflate:

<ifmodule mod_deflate.c>

DeflateCompressionLevel 6

SetOutputFilter DEFLATE    #压缩全部文件

#Don’t compress images and other  #过滤不须要压缩文件

#SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary

SetEnvIfNoCase Request_URI .(?:html|htm)$ no-gzip dont-vary

SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary

SetEnvIfNoCase Request_URI .(?:pdf|doc)$ no-gzip dont-vary

</IfModule>

文件MIME类型能够依据自己情况加入,也能够通过浏览器查看connect-type:

四、mod_gzip 和mod_deflate的主要差别是什么?(来自互联网)

首先一个差别是安装它们的Apache Webserver版本号的差异。Apache 1.x系列没有内建网页压缩技术,所以才去用额外的第三方mod_gzip 模块来执行压缩。而Apache 2.x官方在开发的时候,就把网页压缩考虑进去,内建了mod_deflate 这个模块,用以代替mod_gzip。尽管两者都是使用的Gzip压缩算法,它们的运作原理是相似的。 第二个差别是压缩质量。mod_deflate 压缩速度略快而mod_gzip 的压缩比略高。一般默认情况下,mod_gzip 会比mod_deflate 多出4%~6%的压缩量。 那么,为什么使用mod_deflate?第三个差别是对server资源的占用。 一般来说mod_gzip 对serverCPU的占用要高一些。mod_deflate 是专门为确保server的性能而使用的一个压缩模块,mod_deflate 须要较少的资源来压缩文件。这意味着在高流量的server,使用mod_deflate 可能会比mod_gzip 载入速度更快。

五、效果

chrome 查看: F12 ——》调试模式 ——》 网络 ——》选中左側一个请求文件,例如以下图

没有启动Gzip压缩:

启动Gzip压缩:

大小由10.7K到1.5K,假设文件较大,那么效果会更明显。

參考推荐:

Apache启用GZIP压缩网页传输方法

php gzip压缩输出的实现方法

Apache启用GZIP压缩网页传输方法的更多相关文章

  1. Apache启用GZIP压缩网页传输

    首先我们先了解Apache Gzip的相关资料. 一.gzip介绍 Gzip是一种流行的文件压缩算法,现在的应用十分广泛,尤其是在Linux平台.当应用Gzip压缩到一个纯文本文件时,效果是非常明显的 ...

  2. apache启用gzip压缩方法--转载自http://www.cnblogs.com/linzhenjie/archive/2013/03/05/2943635.html

    一.gzip介绍 Gzip是一种流行的文件压缩算法,现在的应用十分广泛,尤其是在Linux平台.当应用Gzip压缩到一个纯文本文件时,效果是非常明显的,大约可以减少70%以上的文件大小.这取决于文件中 ...

  3. Apache开启GZIP 压缩网页

    首先我们先了解Apache Gzip的相关资料. 一.gzip介绍 Gzip是一种流行的文件压缩算法,现在的应用十分广泛,尤其是在Linux平台.当应用Gzip压缩到一个纯文本文件时,效果是非常明显的 ...

  4. 安装mod_deflate模块启用apache的GZIP压缩

    安装mod_deflate模块启用apache的GZIP压缩 操作系统:Linux Cent OS 5 / Max OS X 10.6 snow leopard相关环境:Apache httpd 2. ...

  5. 网页启用Gzip压缩 提高浏览速度

    启用Gzip压缩的好处 它的好处显而易见,提高网页浏览速度,无论是之前说的精简代码.压缩图片都不如启用Gzip来的实在.下图为启用Gzip后的效果. Gzip压缩效率非常高,通常可以达到70%的压缩率 ...

  6. IIS启用GZIP压缩js、css无效的原因及解决方法

    IIS启用GZIP压缩之后,原以为可以压缩所有文件了,包括html.CSS.JS.图片这些文件,但是当我检查的时候,发现并不是这样的,压缩的只有html文件,而CSS.JS并没有压缩 在卡卡网的网站速 ...

  7. 【Web优化】Yslow优化法则(四)启用Gzip压缩

    Yslow的第4个经验法则指出:启用gzip压缩功能,能够降低HTTP传输的数据和时间,从而降低client请求的响应时间. 本篇是Yslow法则的第四个,主要包含三个方面的内容: 1.      什 ...

  8. 在IIS上启用Gzip压缩(HTTP压缩)

    一.摘要 本文总结了如何为使用IIS托管的网站启用Gzip压缩, 从而减少网页网络传输大小, 提高用户显示页面的速度. 二.前言. 本文的知识点是从互联网收集整理, 主要来源于中文wiki.  使用Y ...

  9. jmeter 启用gzip压缩——解决测试中web服务器上行流量过大的问题

    最近测了几个前端的项目,发现它们都有一个共同点:应用所在服务器的网卡上行(trans)非常大——经常是 117 MB/S,这已经逼近了千兆网卡的极限了.下面记录下排查和解决过程: 一. jmeter ...

随机推荐

  1. 在php添加mongo过程中出现的mongo.so: > undefined symbol: php_json_encode in Unknown on line 0. After installation mongo driver for php 的错误

    3 down vote my system is centos 6.3. I got the problem solved. vim /etc/php.ini then add extension=j ...

  2. Nginx学习之四-Nginx进程同步方式-自旋锁(spinlock)

    自旋锁简介 Nginx框架使用了三种消息传递方式:共享内存.套接字.信号. Nginx主要使用了三种同步方式:原子操作.信号量.文件锁. 基于原子操作,nginx实现了一个自旋锁.自旋锁是一种非睡眠锁 ...

  3. lua 类实现

    Class={}; Class.classList={}; --保存所有已经定义过的类 --类的类型: 类和接口, 接口也是一种类 Class.TYPE_CLASS="Class" ...

  4. C++中的初始化列表中可以对那些变量或对象进行初始化

    构造函数与其函数体之间可以添加初始化列表,能对某些对象进行初始化.格式为 类名() : 变量1(参数1),变量2(参数2) { } 1.     父类的对象的构造必须在初始化列表中,如: 子类名(): ...

  5. 通过jsonp解决浏览器的跨域共享

    因为浏览器的同源策略,普通ajax访问跨域请求返回的json数据是不会被浏览器接受的.看下面例子可以看出是访问不到的 首先 定义webapi 后台代码 public class JsopControl ...

  6. 利用JPEGImageEncoder进行简单的图片压缩

    import java.awt.Dimension; import java.awt.Image; import java.awt.image.BufferedImage; import java.i ...

  7. 谈谈对web标准的理解

    Web标准不是某一个标准,而是由一系列标准组合而成.网页主要由三部分组成:结构.表现和行为.对应的标准也分三方面:结构化标准语言主要包括XHTML和HTML以及XML,表现标准语言主要包括CSS,行为 ...

  8. c++STL之sort排序

    排序算法为竞赛中最常用的算法之一,我们可以利用C++自带的库函数进行排序.                                                                ...

  9. 菜鸟的jQuery源码学习笔记(二)

    jQuery对象是使用构造函数和原型模式相结合的方式创建的.现在来看看jQuery的原型对象jQuery.prototype: jQuery.fn = jQuery.prototype = { //成 ...

  10. AlertDialog与DialogFragment

    1.AlertDialog 作用:简单的弹出框实现 创建方法: AlertDialog alert = new AlertDialog.Builder(); 使用: new AlertDialog.B ...