HTTP压缩,在HTTP协议中,实际上是内容编码的一种。html
在http协议中,能够对内容(也就是body部分)进行编码, 能够采用gzip这样的编码。 从而达到压缩的目的。 也可使用其余的编码把内容搅乱或加密,以此来防止未受权的第三方看到文档的内容。因此咱们说HTTP压缩,其实就是HTTP内容编码的一种。 因此你们不要把HTTP压缩和HTTP内容编码两个概念混淆了。算法
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发送给浏览器。ide
4. 浏览器接到Response后,根据Content-Encoding:gzip来对Response 进行解码。 获取到原始response后, 而后显示出网页。工具
以下图:性能
眼见为实, 咱们看一个实际的例子, 我发现博客园就使用了gzip压缩。编码
使用Fiddler能够清楚地看到。 加密
在Fiddler中,每次都要手动去decode. 太麻烦。 点击工具栏上的"Decode"按钮,就能够自动decode了。code
HTTP定义了一些标准的内容编码类型,并容许用扩展的形式添加更多的编码。
Content-Encoding header 就用这些标准化的代号来讲明编码时使用的算法
Content-Encoding值
gzip 代表实体采用GNU zip编码
compress 代表实体采用Unix的文件压缩程序
deflate 代表实体是用zlib的格式压缩的
identity 代表没有对实体进行编码。当没有Content-Encoding header时, 就默认为这种状况
gzip, compress, 以及deflate编码都是无损压缩算法,用于减小传输报文的大小,不会致使信息损失。 其中gzip一般效率最高, 使用最为普遍。
http压缩对纯文本能够压缩至原内容的40%, 从而节省了60%的数据传输。
实例: 博客园首页压缩前是:46124 bytes. 压缩后是:16368bytes. 只有原先的35%。 节省了65%的数据传输,从而大大提升了性能
有图为证。
JPEG这类文件用gzip压缩的不够好。
简单来讲, Gzip压缩是在一个文本文件中找出相似的字符串, 并临时替换他们,使整个文件变小。这种形式的压缩对Web来讲很是适合, 由于HTML和CSS文件一般包含大量的重复的字符串,例如空格,标签。
浏览器是不会对Request压缩的。 可是 一些HTTP程序在发送Request时,会对其进行编码。 以下图。
转:http://www.cnblogs.com/TankXiao/archive/2012/11/13/2749055.html