http accept-encoding详解 HTTP协议-压缩(gzip,deflate)

转载 2016年06月01日 10:34:23

本文会使用Fiddler来查看HTTP request和Response, 如果不熟悉这个工具,可以先参考[Fiddler教程]

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

 
阅读目录

  1. HTTP内容编码和HTTP压缩的区别
  2. HTTP压缩的过程
  3. 实例:用Fiddler观察HTTP压缩
  4. 内容编码类型
  5. 压缩的好处
  6. gzip的缺点
  7. gzip是如何压缩的
  8. HTTP Response能压缩,HTTP Request也是可以压缩的

 

HTTP内容编码和HTTP压缩的区别

HTTP压缩,在HTTP协议中,其实是内容编码的一种。

在http协议中,可以对内容(也就是body部分)进行编码, 可以采用gzip这样的编码。 从而达到压缩的目的。 也可以使用其他的编码把内容搅乱或加密,以此来防止未授权的第三方看到文档的内容。

所以我们说HTTP压缩,其实就是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发送给浏览器。

4. 浏览器接到Response后,根据Content-Encoding:gzip来对Response 进行解码。 获取到原始response后, 然后显示出网页。


如下图:

 

 

实例:Fiddler观察HTTP压缩

眼见为实, 我们看一个实际的例子, 我发现博客园就使用了gzip压缩。

使用Fiddler可以清楚地看到。  

 

在Fiddler中,每次都要手动去decode. 太麻烦。  点击工具栏上的"Decode"按钮,就可以自动decode了。

 

内容编码类型

 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%的数据传输,从而大大提高了性能

 有图为证。

 

Gzip的缺点

JPEG这类文件用gzip压缩的不够好。

 

Gzip是如何压缩的

简单来说, Gzip压缩是在一个文本文件中找出类似的字符串, 并临时替换他们,使整个文件变小。这种形式的压缩对Web来说非常适合, 因为HTML和CSS文件通常包含大量的重复的字符串,例如空格,标签。

 

HTTP Response能压缩,HTTP Request也是可以压缩的

浏览器是不会对Request压缩的。 但是 一些HTTP程序在发送Request时,会对其进行编码。 如下图。

 

Accept-Encoding: gzip,deflate 以压缩格式接收请求数据

转自:http://www.cnblogs.com/linyawen/archive/2011/01/17/1937204.html IE和我们的代码使用的HTTP头里面都有这条内容...
  • hutao1101175783
  • hutao1101175783
  • 2015年01月11日 21:01
  • 5111

Web服务器之Http压缩(GZip)

 作者:张子秋 出处:http://www.cnblogs.com/zhangziqiu/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出...
  • kenkao
  • kenkao
  • 2016年05月07日 09:33
  • 1724

HttpCLient实现对被GZip压缩过的Response进行解压

发送http请求时,设置请求头Accept-Encoding:gzip, deflate,则服务器会返回压缩的内容。 若不设置,相应内容则正常返回。 发送请求(要求服务端对re...
  • qq_29663071
  • qq_29663071
  • 2016年11月29日 16:47
  • 3087

Android Accept-Encoding为gzip,deflate Http请求返回的结果为乱码

最近项目中遇到这样一个坑: 某一接口的HttpUrlConnection的请求返回结果为乱码,但PC浏览器直接打开是正常的。 效果图如下: 经过查阅代码发现,该接口的对应Header中有这么一段...
  • aiwusheng
  • aiwusheng
  • 2017年03月29日 14:35
  • 1801

httpclient访问网站时设置Accept-Encoding为gzip,deflate返回的结果为乱码的问题

今天写代码的时候遇到一个很纠结的问题,网页返回的数据是乱码,因为我们写代码都会封装一层请求的代码,当初小金子为了让封装的类更接近浏览器访问的效果,就复制了火狐的一次访问的多个头字段,也就是其中一个字段...
  • xujin_chen
  • xujin_chen
  • 2016年12月10日 11:56
  • 173

Accept-Encoding: gzip,deflate

IE和我们的代码使用的HTTP头里面都有这条内容,将这条内容删掉我得到了正确的结果。原因如下: 这条信息代表本地可以接收压缩格式的数据,而服务器在处理时就将大文件压缩再发回客户端,IE在接收完成后在...
  • ouweiqi
  • ouweiqi
  • 2011年11月27日 13:08
  • 5885

Java压缩/解压缩二进制文件--http中content-encoding:deflate也可以使用

在Java中提供Deflater和Inflater工具类来压缩/解压缩数据。 这两个工具类采用zlib算法,下面给出一个封装好的工具。 Java代码   /**...
  • chenrunhua
  • chenrunhua
  • 2015年06月09日 17:27
  • 2627

python---get/post请求下载指定URL返回的网页内容,出现gzip乱码处理。设置Accept-Encoding为gzip,deflate,返回的网页是乱码

python—get/post请求下载指定URL返回的网页内容,出现gzip乱码处理。设置Accept-Encoding为gzip,deflate,返回的网页是乱码 1、脚本 # --*-- co...
  • xwbk12
  • xwbk12
  • 2018年01月09日 10:27
  • 26

Web服务器处理HTTP压缩之gzip、deflate压缩

摘要 现如今在处理http请求的时候,由于请求的资源较多,如果不启用压缩的话,那么页面请求的流量将会非常大。启用gzip压缩,在一定程度上会大大的提高页面性能。 http gzip deflate w...
  • muye0503
  • muye0503
  • 2015年01月05日 23:01
  • 355

Web服务器处理HTTP压缩之gzip、deflate压缩

摘要 现如今在处理http请求的时候,由于请求的资源较多,如果不启用压缩的话,那么页面请求的流量将会非常大。启用gzip压缩,在一定程度上会大大的提高页面性能。 http gzip deflate ...
  • nchu2020
  • nchu2020
  • 2016年01月19日 14:14
  • 216
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:http accept-encoding详解 HTTP协议-压缩(gzip,deflate)
举报原因:
原因补充:

(最多只允许输入30个字)