`

用Gzip对网页内容进行压缩详解

 
阅读更多

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

利用Apache中的Gzip模块,我们可以使用Gzip压缩算法来对Apache服务器发布的网页内容进行压缩后再传输到客户端浏览器。这样经过压缩后实际上降低了网络传输的字节数,最明显的好处就是可以加快网页加载的速度。

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

而这些好处并不仅仅限于静态内容,PHP动态页面和其他动态生成的内容均可以通过使用Apache压缩模块压缩,加上其他的性能调整机制和相应的服务器端缓存规则,这可以大大提高网站的性能。

因此,对于部署在Linux服务器上的PHP程序,在服务器支持的情况下,我们建议你开启使用Gzip Web压缩。

二、 Gzip Web压缩工作原理

Web服务器处理HTTP压缩的过程如下:

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

2. 如果浏览器支持HTTP压缩,Web服务器检查请求文件的后缀名;

3. 如果请求文件是HTML、CSS等静态文件,Web服务器到压缩缓冲目录中检查是否已经存在请求文件的最新压缩文件;

4. 如果请求文件的压缩文件不存在,Web服务器向浏览器返回未压缩的请求文件,并在压缩缓冲目录中存放请求文件的压缩文件;

5. 如果请求文件的最新压缩文件已经存在,则直接返回请求文件的压缩文件;

6. 如果请求文件是动态文件,Web服务器动态压缩内容并返回浏览器,压缩内容不存放到压缩缓存目录中。

下面是两个演示图:

未使用Gzip:

Apache Web Gzip

开启使用Gzip后:

Apache Web Gzip

、让我们开始吧!

Apache上利用Gzip压缩算法进行压缩的模块有两种:mod_gzip 和mod_deflate。要使用Gzip Web压缩,请首先确定你的服务器开启了对这两个组件之一的支持。在Linux服务器上,现在已经有越来越多的空间商开放了对它们的支持,有的甚至是同时 支持这两个模块的。例如目前Godaddy、Bluehost及DreamHosts等空间商的服务器都已同时支持mod_gzip 和mod_deflate。

虽然使用Gzip同时也需要客户端浏览器的支持,不过不用担心,目前大部分浏览器都已经支持Gzip了,如IE、Mozilla Firefox、Opera、Chrome等。

通过查看HTTP头,我们可以快速判断使用的客户端浏览器是否支持接受gzip压缩。

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

Accept-Encoding: gzip     支持mod_gzip
Accept-Encoding: deflate     支持mod_deflate
Accept-Encoding: gzip,deflate    同时支持mod_gzip 和mod_deflate

 

 

如果服务器开启了对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>

 

以下为引用的内容:

# mod_deflate:
<ifmodule mod_deflate.c>
DeflateCompressionLevel 6 #压缩率, 6是建议值.
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
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
</ifmodule>

里面的文件MIME类型可以根据自己情况添加,至于PDF 、图片、音乐文档之类的这些本身都已经高度压缩格式,重复压缩的作用不大,反而可能会因为增加CPU的处理时间及浏览器的渲染问题而降低性能。所以就没必要再通过Gzip压缩。

通过以上设置后再查看返回的HTTP头,出现以下信息则表明返回的数据已经过压缩。即网站程序所配置的Gzip压缩已生效。

Content-Encoding: gzip

注:不管使用mod_gzip 还是mod_deflate,此处返回的信息都一样。因为它们都是实现的gzip压缩方式。

除此之外,还可以通过一些在线检测工具(如:http://www.whatsmyip.org/http_compression/)来检测你的网站内容是否已经过Gzip压缩。

分享到:
评论

相关推荐

    Nginx使用Gzip算法对报文进行压缩详解

    主要给大家介绍了关于Nginx的Gzip功能的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Nginx具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

    Nodejs关于gzip deflate压缩详解.docx

    Nodejs关于gzip deflate压缩详解.docx

    Net WebService 同步、异步、同步压缩解压和异步压缩解压实例详解(自带的Gzip)

    Net WebService 同步、异步、同步压缩解压和异步压缩解压实例详解(自带的Gzip) 总想抽时间把webservice 中的相关技术好好整理下,今天时间刚好,随便写了个demo跟大家分享。给刚入门的人看看,高手看了如果有什么要...

    linux之centos7打包与压缩命令详解

    压缩命令gzip可以将文件进行压缩,使用时需要指定选项来进行操作,如"-d"表示解压缩文件,"-r"表示对目录进行递归压缩,"-z"表示使用gzip进行压缩。适用于Linux系统管理员和开发人员等人群,内容关键词包括打包、...

    Gzip Zlib PNG 压缩算法

    Gzip Zlib PNG 压缩算法,包含了png压缩的方式和格式,libpng等应用,主要是deflate算法

    Nginx服务器中的GZip配置参数详解

    gzip(GUN-ZIP)是一种压缩技术,经过gzip压缩后的页面大小可以变成原来的30%或者更小。 用户浏览页面的时候速度也会更快,gzip的压缩页面需要服务端于浏览器同时支持,服务端压缩传到 浏览器进行解压并解析,现在大多数的...

    各种压缩和解压缩命令详解

    tar compress bzip2和bzcat gzip和zcat cpio 压缩、解压缩

    Android GZip的使用-开发中网络请求的压缩实例详解

    主要介绍了Android GZip的使用-开发中网络请求的压缩实例详解的相关资料,需要的朋友可以参考下

    linux tar命令详解

     这条命令是将所有.jpg的文件打成一个tar包,并且将其用gzip压缩,生成一个gzip压缩过的包,包名为all.tar.gz  # tar -xzf all.tar.gz  这条命令是将上面产生的包解开。  2) tar调用bzip2  bzip2是个压缩能力更...

    PHP使用zlib扩展实现GZIP压缩输出的方法详解

    主要介绍了PHP使用zlib扩展实现GZIP压缩输出的方法,结合实例形式详细分析了php gzip配置及压缩输出的相关操作技巧,需要的朋友可以参考下

    详解Nginx服务器的配置中开启文件Gzip压缩的方法

    经过gzip压缩后页面大小可以变为原来的30%甚至更小,这样,用户浏览页面的时候速度会块得多。gzip的压缩页面需要浏览 器和服务器双方都支持,实际上就是服务器端压缩,传到浏览器后浏览器解压并解析。浏览器那里不...

    Nodejs关于gzip/deflate压缩详解

    本文主要向大家介绍了nodejs中关于gzip/deflate压缩的2种方法,分别是管道压缩和非管道压缩,十分详细,并附带示例,这里推荐给大家参考下。

    nuxt-precompress:用于gzip和Brotli的Nuxt模块自动压缩并提供服务

    该模块对gzip和brotli使用 。 compression-webpack-plugin支持brotli基于添加的对,因此,如果您使用较低的nodejs版本,则此模块将仅为您提供gzip版本,但如果存在brotli,则也将为其提供服务。 模块不会覆盖...

    Linux gzip命令用法详解

    gzip是个使用广泛的压缩程序,文件经它压缩过后,其名称后面会多出”.gz”的扩展名。 语法 gzip [-acdfhlLnNqrtvV][-S &lt;压缩字尾字符串&gt;][-&lt;压缩效率&gt;][--best/fast][文件...] 或 gzip [-acdfhlLnNqrtvV][-S ...

    Linux下的tar压缩解压缩命令详解(小结)

    这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的。 -z:有gzip属性的 -j:有bz2属性的 -Z:有compress属性的 -v:显示所有过程 ...

    Linux下的压缩解压缩命令详解

    本文介绍了linux下的压缩程式tar、gzip、gunzip、bzip2、bunzip2、 compress、uncompress、zip、unzip、rar、unrar等程式,以及如何使用它们对.tar、.gz、.tar.gz、. tgz、.bz2、.tar.bz2、.Z、.tar.Z、.zip、.rar这...

    nginx下gzip配置参数详解

    Nginx自带的有gzip模块 http://wiki.nginx.org/NginxChsHttpGzipModule ,这个模块支持在线实时压缩输出数据流。...内置变量 $gzip_ratio 可以获取到gzip的压缩比率 指令: 代码如下: [#gzip gzip]

Global site tag (gtag.js) - Google Analytics