网页压缩
1.网页压缩(理论)
1.0.1 gzip介绍
- 配置Apache的网页压缩功能,是使用gzip压缩算法来对网页内容进行压缩后再传输到客户端浏览器
- 作用
- 降低了网络传输的字节数,加快网页加载的速度
- 节省流量,改善用户的浏览体验
- gzip与搜索引擎的抓取工具有着更好的关系
1.0.2 Apache的压缩模块
- Apache实现网页压缩的功能模块包括
- modgzip 模块
- moddeflate模块
- Apache 1.X
- 没有内建网页压缩技术,但可使用第三方mod_gzip模块执行压缩
- Apache 2.x
- 在开发的时候,内建了mod_deflate 这个模块,取代
mod_gzip o4Apache网防化x∶
- 在开发的时候,内建了mod_deflate 这个模块,取代
- mod_gzip模块与mod_deflate模块
两者均使用gzip压缩算法,运作原理类似 - mod_deflate压缩速度略快,而mod_gzip的压缩比略高
- mod_gzip对服务器CPU的占用要高一些
- 高流量的服务器,使用mod_deflate可能会比mod_gzip 加
载速度更快 - 启用网页压缩功能步骤
1.0.3 HTTP压缩的过程
- Web服务器接收到浏览器的 HTTP请求后,检查浏览器是否支持HTTP压缩
- (Accept-Encoding信息),如果浏览器支持HTTP压缩,Web服务器检查请求文件的后缀名,如果请求文件是HTML、CSS等静态文件,Web 服务器到压缩缓冲目录中检查是否已经存在请求文件的最新压缩文件。如果请求文件的压缩文件不存在,Web服务器向浏览器返回未压缩的请求文件,并在压缩缓冲目录中存放请求文件的压缩文件,如果请求文件的最新压缩文件已经存在,则直接返回请求文件的压缩文件。如果请求文件是动态文件,Web 服务器动态压缩内容并返回浏览器,压缩内容不存放到压缩缓存目录中。
1.0.4 Apache的压缩模块
- Apache 1.x系列没有内建网页压缩技术,使用的是额外的第三方mod gzip模块来执行压缩。而 Apache 2.x 官方在开发的时候,就把网页压缩考虑进去,内建了mod deflate 这个模块,用以取代 mod_gzip。两者都是使用的gzip 压缩算法,它们的运作原理是类似的。mod_deflate 压缩速度略快而mod gzip的压缩比略高。一般默认情况下,mod gzip 会比 mod_deflate多出4%~6%的压缩量。
- 一般来说modgzip 对服务器CPU的占用要高一些。mod deflate是专门为确保服务器的性能而使用的一个压缩模块,mod_deflate 需要较少的资源来压缩文件。这意味着在高流量的服务器,使用mod_deflate 可能会比 modgzip 加载速度更快。
- 简而言之,如果网站访问量较小,想要加快网页的加载速度,就使用mod_gzip。虽然会额外耗费一些服务器资源,但也是值得的。如果网站访问量较大、使用的是共享虚拟主机,且所分配系统资源有限,那么使用 mod_deflate 将会是更好的选择。
- 另外,从Apache 2.0.45开始,mod _deflate模块可使用 DeflateCompressionLevel指令来设置压缩级别。该指令的值可为1至(压缩速度最快,最低的压缩质量)9(最慢的压缩速度,压缩率最高)之间的整数,其默认值为6(压缩速度和压缩质量较为平衡的值)。这个简单的变化更是使得 mod_deflate 可以轻松媲美 mod gzip的压缩。
2. 网页压缩(实操)
2.0.1 mod_deflate 模块
- 检查是否安装了mod_deflate 模块
[root@localhost~]# apachectl-D DUMP_MODULESgrep "deflate"(2)安装 mod_deflate 模块
如果没有安装mod _deflate模块
需要停止Apache 服务
重新编译安装Apache参数中加入
2.0.2 mod_deflate 模块内容
[root@localhost ~]#systemctl stop httpd
[root@localhost ~]# cd/opt/httpd-2.4.29/
[root@localhost httpd-2.4.29]#./configure\
--prefix=/usr/local/httpd\
--enable-so\--enable-rewrite\
--enable-charset-lite\
--enable-cgi\
--enable-cgid\
--enable-deflate
- 在进行编译安装Apache时,出现如下错误
checking whether to enable mod _deflate…configure: error:mod_deflate has been requested but can not be built due to prerequisite failures
-
解决方案 :
*输入:yum install -y zlib -devel -
enable-deflate 加入mode_deflate模块
[root@localhost httpd-2.4.29]#make && make install
2.0.3 配置mod_deflate模块启用
- 编译安装后,mod_deflate模块需要在 httpd.conf 文件启用才能生效。
[root@localhost httpd-2.4.29]vi/usr/local/httpd/conf/httpd.conf
省略htpd.conf 文件内容,文件末尾加入以下内容启用modeflate模块
LoadModule deflate module modules/mod_deflate.so
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/css
text/xml text/javascript image/png image/jpg
DsilateCompressionlevel9
SetOutputFilter DEFLATE
</IfModule>
- 第一行代表对什么样的内容启用 gzip 压缩,
- 第二行代表压缩级别,
- 第三行代表启用deflate模块对本站点的输出进行gzip 压缩。
2.0.4 检测 httpd.conf
- 检测 httpd.conf 语法并重启服务使配置生效
[root@localhost httpd-2.4.29]#httpd-t
Syntax OK
[root@localhost httpd-2.4.29]# systemctl restart httpd
######
把b照片传入/usr/local/httpd/htdocs/目下
[root@localhost httpd-2.4.29]#cd/usr/local/httpd/htdocs/
---测试页---
<html>
<head>
<title>--压缩测试页--</title>
</head>
<body><h1>这是一个测试网页内容压缩的页面!!This is test Pagel!</h1>
<img src=b.jgp/>
</body>
</html>
---注意中文乱码问题解决方法如下---
vi/etc/httpd.conf
AddDefaultCharset utf-8
service httpd restart
- 用wireshaerk抓包测试图片传输是否压缩
找到HTTP/1.1 200 OK(JPEG JFIF image)
找到Hyertext Transfer Protocol
找到HTTP/1.1200 OK\r\n
找到content-Encoding∶gzip\r\n ###这个地方表示图片压缩