HTTP压缩,在HTTP协议中,实际上是内容编码的一种。javascript
在http协议中,能够对内容(也就是body部分)进行编码, 能够采用gzip这样的编码。 从而达到压缩的目的。 也可使用其余的编码把内容搅乱或加密,以此来防止未受权的第三方看到文档的内容。html
因此咱们说HTTP压缩,其实就是HTTP内容编码的一种。 因此你们不要把HTTP压缩和HTTP内容编码两个概念混淆了。java
HTTP压缩是指: Web服务器和浏览器之间压缩传输的”文本内容“的方法。 HTTP采用通用的压缩算法,好比gzip来压缩html,javascript, CSS文件。 能大大减小网络传输的数据量,提升了用户显示网页的速度。固然,同时会增长一点点服务器的开销。 本文从HTTP协议的角度,来理解HTTP压缩这个概念。web
首先,浏览器发送一个请求(request)给web服务器,支持一个压缩格式如(gzip),服务端会将原来的源码压缩以后,经过http响应(response)信息返回给web浏览器,浏览器接收以后,显示出来。算法
1. 浏览器发送Http request 给Web服务器, request 中有Accept-Encoding: gzip, deflate。 (告诉服务器, 浏览器支持gzip压缩)浏览器
2. Web服务器接到request后, 生成原始的Response, 其中有原始的Content-Type和Content-Length。服务器
3. Web服务器经过Gzip,来对Response进行编码, 编码后header中有Content-Type和Content-Length(压缩后的大小), 而且增长了Content-Encoding:gzip. 而后把Response发送给浏览器。网络
4. 浏览器接到Response后,根据Content-Encoding:gzip来对Response 进行解码。 获取到原始response后, 而后显示出网页。
以下图:ide
HTTP定义了一些标准的内容编码类型,并容许用扩展的形式添加更多的编码。编码
Content-Encoding header 就用这些标准化的代号来讲明编码时使用的算法
Content-Encoding值
gzip, compress, 以及deflate编码都是无损压缩算法,用于减小传输报文的大小,不会致使信息损失。 其中gzip一般效率最高, 使用最为普遍。
http压缩对纯文本能够压缩至原内容的40%, 从而节省了60%的数据传输。
JPEG这类文件用gzip压缩的不够好。
简单来讲, Gzip压缩是在一个文本文件中找出相似的字符串, 并临时替换他们,使整个文件变小。这种形式的压缩对Web来讲很是适合, 由于HTML和CSS文件一般包含大量的重复的字符串,例如空格,标签。
浏览器是不会对Request压缩的。 可是 一些HTTP程序在发送Request时,会对其进行编码。
本文转自: