博主辛苦了,我要打赏银两给博主,犒劳犒劳站长。
【摘要】开启 gzip 压缩能够在传送数据之前将数据进行压缩,这样使得原本需要传送 100Kb 数据,经过压缩只需传送 50Kb,能够减少传输的数据量,提高访问速度。开启后,可能会导致 http 的 304 失效(一直成为 200),需要对此问题进行处理。
首先介绍一点基础知识,在未开启 Gzip 之前网络访问情况如下图所示,
打开时间是 12ms
Response Headers 下面的 Content-Length:2086,只的是网页加载的大小(若没有这一项则强制刷新网页 Ctrl + F5 或者清空浏览器后重新访问)。
Request Headers 中的 Accept-Encoding: gzip, deflate,指客户端浏览器能够接收的编码格式,目前绝大部分浏览器都支持 gzip 格式的传输数据。
针对 apache 2.4.9 开启 gzip 的方法,打开 httpd.conf,找到并去掉之前的 # 号
LoadModule deflate_module modules/mod_deflate.so
并在配置文件尾部添加:
<IfModule mod_deflate.c>
# 告诉 apache 对传输到浏览器的内容进行压缩
SetOutputFilter DEFLATE
# 压缩等级 1-9,级别越高压缩效率越大,但 CUP 占有率也越大,一般设置成 6
DeflateCompressionLevel 6
# 设置不对后缀 gif,jpg,jpeg,png 等图片文件进行压缩
# 因为有些图片本身就已经压缩了,再次压缩的话,会很占有 CPU 效率的,而且压缩效果也不会很明显
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
</IfModule>
此时重启 apache 后,gzip 生效,数据量压缩成功,响应时间缩短,如下图所示:
打开时间是 8ms
然而开启之后,使用 F5 刷新页面时,不再显示 304 not modified 而是变成了 200,如下图所示:
解决办法是开启 mod_headers.so:
LoadModule headers_module modules/mod_headers.so
并且在配置文件尾部加入:
<IfModule mod_headers.c>
<FilesMatch ".(js|css|html|htm|png|swf|pdf|shtml|xml|flv|gif|ico|jpeg)$">
RequestHeader edit "If-None-Match" "^(.*)-gzip(.*)$" "$1$2"
Header edit "ETag" "^(.*)-gzip(.*)$" "$1$2"
</FilesMatch>
</IfModule>
这样整个 gzip 开启步骤就完成了。
版权归 马富天PHP博客 所有
本文标题:《Apache 2.4.9 开启 Gzip 压缩服务,并解决开启后 http 304 状态码失效问题》
本文链接地址:http://www.mafutian.net/390.html
转载请务必注明出处,小生将不胜感激,谢谢! 喜欢本文或觉得本文对您有帮助,请分享给您的朋友 ^_^
顶1
踩0
第 5 楼 丰富 2018-12-14 10:24:12 暂无分享
第 4 楼 丰富 2018-12-14 10:23:30 暂无分享
第 3 楼 丰富 2018-12-14 10:23:12 暂无分享
第 2 楼 大苏打 2018-11-30 17:55:31 暂无分享
第 1 楼 大苏打 2018-11-30 17:55:07 暂无分享
评论审核未开启 |