HTTP协议与内容如何实现压缩

338 阅读2分钟

这是我参与8月更文挑战的第1天,活动详情查看:8月更文挑战

作为一个程序员,特别是前端程序员,F12查看网页是我们每一天都要做的事情,细心的码农们应该会发现一个问题或者了解这个事情。 那就是:页面源码文件的大小和响应头信息中的Content-Length不一致? Content-length:代表返回主题长度。为什么不一致?

是由于:相应头信息中的Content-Encoding:gzip的作用。

原理:为了提高网页在网络上的运输速度,服务器对主体信息进行压缩(gzip压缩,deflate压缩,compress压缩,以 及Google的sdch压缩)

HTTP压缩是指: Web服务器和浏览器之间压缩传输的”文本内容“的方法。 HTTP采用通用的压缩算法,比如gzip来压缩 html,javascript, CSS文件。 能大大减少网络传输的数据量,提高了用户显示网页的速度。当然,同时会增加一点点 服务器的开销。 本文从HTTP协议的角度,来理解HTTP压缩这个概念。

首先,浏览器发送一个请求(request)给web服务器,支持一个压缩格式如(gzip),服务端会将原来的源码压缩之后,通过http响应(response)信息返回给web浏览器,返回压缩内容之后,浏览器接受到压缩文件之后进行解压,再渲染页面。所以Content-Length是压缩后的大小。

如何在 Apache启用压缩功能:

1:开启:deflate模块或者gzip模块。在httpd.conf文件中,找到gzip或者deflate等把前面的#去掉

2:在conf文件中,写代码:

DeflateCompressionLevel 6 #压缩级别为6,可选1-9 推荐6

AddOutputFileterByTypeDEFLATE text/plain #压缩文本文件

AddOutputFileterByTypeDEFLATE texthtml #压缩html文件

AddOutputFileterByTypeDEFLATE text/xml #压缩xml文件

。。。

为什么要指定文件类型来压缩?

因为压缩也是要消耗CPU资源的,而图片、视频等文件,压缩效果不好。所以一般压缩文本格式文件。

说了这么多,你会提出疑问,服务器怎么会知道我们的浏览器支持gzip或者其他的压缩格式呢?

->在请求头信息中的Accept-Encoding 于服务器写上:gzip,deflate,sdch等压缩方式。