zoukankan      html  css  js  c++  java
  • Apache启用GZIP压缩网页传输方法

    一、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 MSIE !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压缩输出的实现方法


  • 相关阅读:
    项目无法运行iPhone5模拟器
    多线程下载图片,滑动tableView崩溃--资源抢夺问题
    提醒事项 1. 冥想TX 2.下班路上听歌激励自己 3. 不戴眼镜 4. 困难任务拆解
    AutoLayout性能不如frame
    Tunnelblick 覆盖安装失败
    weakSelf 和 strongSelf
    动画
    4/16 近期状态
    知乎live 我的读书经验 总结
    C语言-第23课
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/3825184.html
Copyright © 2011-2022 走看看