开启gzip好处多多,对数据进行压缩数据,节省流量。
GZip压缩的基本流程如下:
1. Web服务器接收到浏览器的HTTP请求后,检查浏览器是否支持HTTP压缩(Accept-Encoding 信息);
2. 如果浏览器支持HTTP压缩,Web服务器检查请求文件的后缀名;
3. 如果请求文件是HTML、CSS等静态文件,Web服务器到压缩缓冲目录中检查是否已经存在请求文件的最新压缩文件;
4. 如果请求文件的压缩文件不存在,Web服务器向浏览器返回未压缩的请求文件,并在压缩缓冲目录中存放请求文件的压缩文件;
5. 如果请求文件的最新压缩文件已经存在,则直接返回请求文件的压缩文件;
6. 如果请求文件是动态文件,Web服务器动态压缩内容并返回浏览器,压缩内容不存放到压缩缓存目录中。
在apache2.4中开启gzip,此处以ubuntu 14系统为例。
找到/etc/apache2/sites-available/default
文件,具体文件和服务器配置有关。
加入如下代码:
<IfModule mod_deflate.c>
DeflateCompressionLevel 6
SetOutputFilter DEFLATE
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/x-javascript application/javascript application/json
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|mov|avi|mp3|mp4|rm)$ no-gzip dont-vary
AddOutputFilterByType DEFLATE text/*
AddOutputFilterByType DEFLATE application/ms* application/vnd* application/postscript application/javascript application/x-javascript
AddOutputFilterByType DEFLATE application/x-httpd-php application/x-httpd-fastphp
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
</IfModule>
简单解释几个配置:
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
设置不对后缀gif,jpg,jpeg,png的图片文件进行压缩
AddOutputFilterByType DEFLATE text/*
设置对文件是文本的内容进行压缩,例如text/html text/css text/plain等
application/postscript application/javascript application/x-javascript
对javascript文件进行压缩
AddOutputFilterByType DEFLATE application/x-httpd-php application/x-httpd-fastphp
对php类型的文件进行压缩
BrowserMatch ^Mozilla/4 gzip-only-text/html
Netscape 4.x 有一些问题,所以只压缩文件类型是text/html的
BrowserMatch ^Mozilla/4.0[678] no-gzip
Netscape 4.06-4.08 有更多的问题,所以不开启压缩
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
IE浏览器会伪装成 Netscape ,但是事实上它没有问题
之后重启apache service apache2 restart
。
重新打开页面,用开发者工具看下Response Header,看到Content-Encoding:gzip
则表示打开成功了。
同时我们还可以去掉一些不必要的服务器信息,在刚才的配置中加入:
ServerSignature Off
ServerTokens Prod
可以去掉响应头中apache的一些版本信息。
Ok,搞定。