Apache 2.4.9 开启 Gzip 压缩服务,并解决开启后 http 304 状态码失效问题

学习笔记 马富天 2018-11-19 15:52:04 12 2

【摘要】开启 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,找到并去掉之前的 # 号

  1. LoadModule deflate_module modules/mod_deflate.so

并在配置文件尾部添加:

  1. <IfModule mod_deflate.c>
  2. 	# 告诉 apache 对传输到浏览器的内容进行压缩
  3. 	SetOutputFilter DEFLATE
  4. 	# 压缩等级 1-9,级别越高压缩效率越大,但 CUP 占有率也越大,一般设置成 6
  5. 	DeflateCompressionLevel 6
  6. 	# 设置不对后缀 gif,jpg,jpeg,png 等图片文件进行压缩
  7. 	# 因为有些图片本身就已经压缩了,再次压缩的话,会很占有 CPU 效率的,而且压缩效果也不会很明显
  8. 	SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
  9. </IfModule>

此时重启 apache 后,gzip 生效,数据量压缩成功,响应时间缩短,如下图所示:

请输入图片名称请输入图片名称

打开时间是 8ms

然而开启之后,使用 F5 刷新页面时,不再显示 304 not modified 而是变成了 200,如下图所示:

请输入图片名称请输入图片名称

解决办法是开启 mod_headers.so:

  1. LoadModule headers_module modules/mod_headers.so

并且在配置文件尾部加入:

  1. <IfModule mod_headers.c>
  2. 	<FilesMatch ".(js|css|html|htm|png|swf|pdf|shtml|xml|flv|gif|ico|jpeg)$">
  3. 		RequestHeader edit "If-None-Match" "^(.*)-gzip(.*)$" "$1$2"
  4. 		Header edit "ETag" "^(.*)-gzip(.*)$" "$1$2"
  5. 	</FilesMatch>
  6. </IfModule>

这样整个 gzip 开启步骤就完成了。

版权归 马富天PHP博客 所有

本文标题:《Apache 2.4.9 开启 Gzip 压缩服务,并解决开启后 http 304 状态码失效问题》

本文链接地址:http://www.mafutian.net/390.html

转载请务必注明出处,小生将不胜感激,谢谢! 喜欢本文或觉得本文对您有帮助,请分享给您的朋友 ^_^

1

0

上一篇《 html css js 遮罩通用版小 demo【兼容所有浏览器】 》 下一篇《 JavaScript/js 匿名函数 》

所有评论

  1. 首页
  2. 上一页
  3. 1
  4. 下一页
  5. 尾页
  6. 第1页
  7. 每页12条
  8. 共1页
  9. 共2条
评论审核未开启
表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情
验证码

TOP10

  • 浏览最多
  • 评论最多