多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## gzip介绍 Gzip是一种流行的文件压缩算法,现在的应用十分广泛,尤其是在Linux平台。当应用Gzip压缩到一个纯文本文件时,效果是非常明显的,大约可以减少70%以上的文件大小。 利用Apache中的Gzip模块,我们可以使用Gzip压缩算法来对Apache服务器发布的网页内容进行压缩后再传输到客户端浏览器。这样经过压缩后实际上降低了网络传输的字节数,最明显的好处就是可以加快网页加载的速度。 网页加载速度加快的好处不言而喻,除了节省流量,改善用户的浏览体验外,另一个潜在的好处是Gzip与搜索引擎的抓取工具有着更好的关系。 ## Web服务器HTTP压缩的过程 Web服务器接收到浏览器的HTTP请求后,检查浏览器是否支持HTTP压缩(Accept-Encoding 信息); 如果浏览器支持HTTP压缩,Web服务器检查请求文件的后缀名; 如果请求文件是HTML、CSS**等静态文件**,Web服务器到压缩缓冲目录中检查是否已经存在请求文件的最新压缩文件; 如果请求文件的压缩文件不存在,Web服务器向浏览器返回**未压缩的请求文件**,并在压缩缓冲目录中存放请求文件的压缩文件; 如果请求文件的最新压缩文件已经存在,则直接返回请求文件的压缩文件; 如果请求文件是**动态文件**,Web服务器动态压缩内容并返回浏览器,压缩内容不存放到压缩缓存目录中。 ## 开启Gzip Apache利用Gzip压缩算法进行压缩的模块有两种:mod_gzip 和mod_deflate。 ### mod_gzip方式 ~~~ # mod_gzip 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.* ~~~ ### deflate_Module方式 #### 方式1,可在全局设置 ~~~ <ifmodule mod_deflate.c> DeflateCompressionLevel 9 AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-httpd-php AddOutputFilter DEFLATE css js </ifmodule> ~~~ #### 方式2,可在directory中设置,也可以在全局设置 ~~~ SetOutputFilter DEFLATE AddOutputFilterByType DEFLATE text/html text/plain text/xml AddOutputFilter DEFLATE css js BrowserMatch ^Mozilla/4 gzip-only-text/html # Netscape 4.x 有一些问题... BrowserMatch ^Mozilla/4\.0[678] no-gzip # Netscape 4.06-4.08 有更多的问题 BrowserMatch \bMSIE !no-gzip !gzip-only-text/html # MSIE 会伪装成 Netscape ,但是事实上它没有问题 # 不压缩图片 #对照片文件不进行压缩处理 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$ no-gzip dont-vary #SetEnvIfNoCase Request_URI .(css|js)$ no-gzip dont-vary # 确保代理不会发送错误的内容 Header append Vary User-Agent env=!dont-vary # 记录压缩日至 DeflateFilterNote Input input_info DeflateFilterNote Output output_info DeflateFilterNote Ratio ratio_info LogFormat '"%r" %{output_info}n/%{input_info}n (%{ratio_info}n%%)' deflate CustomLog logs/deflate_log.log deflate ~~~ ## mod_gzip 和mod_deflate的主要区别是什么? Apache 1.x系列没有内建网页压缩技术,所以才去用额外的第三方mod_gzip 模块来执行压缩。而Apache 2.x官方在开发的时候,就把网页压缩考虑进去,内建了mod_deflate 这个模块,用以取代mod_gzip。 第二个区别是压缩质量。mod_deflate 压缩速度略快而mod_gzip 的压缩比略高。一般默认情况下,mod_gzip 会比mod_deflate 多出4%~6%的压缩量。 那么,为什么使用mod_deflate?第三个区别是对服务器资源的占用。 一般来说mod_gzip 对服务器CPU的占用要高一些。 mod_deflate 是专门为确保服务器的性能而使用的一个压缩模块,mod_deflate 需要较少的资源来压缩文件。这意味着在高流量的服务器,使用mod_deflate 可能会比mod_gzip 加载速度更快。