`
san_yun
  • 浏览: 2611231 次
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

HTTP协议-压缩(gzip,deflate)

    博客分类:
  • HTTP
 
阅读更多

本文会使用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时,会对其进行编码。 如下图。

 
分享到:
评论

相关推荐

    Nginx启用GZIP压缩网页传输方法(推荐)

    从http协议的角度看–请求头 声明 acceopt-encoding: gzip deflate sdch (是指压缩算法,其中sdch是google倡导的一种压缩方式,目前支持的服务器尚不多) 服务器–>回应—把内容用gzip方式压缩—->发给浏览器 浏览<...

    Linux系统抓包命令tcpdump使用实例.docx

    另外,在抓取 web 包的时候,发送网页内容都是很奇怪的字符,发现是 apache 开启了 gzip 压缩的缘故,关闭掉 gzip 压缩就可以了。在 ubuntu 12.04 下,编辑 /etc/apache2/mods-enabled/deflate.load 文件,将加载...

    常见请求和响应头-说明.docx

    3. Accept-Encoding: 指定浏览器可以支持的 web 服务器返回内容压缩编码类型,例如 Accept-Encoding: compress, gzip。 4. Accept-Language: 指定浏览器可接受的语言,例如 Accept-Language: en,zh。 5. Accept-...

    nodejs写的HTTP静态文件的引擎(轻量级)

    支持gzip、deflate压缩 支持分段下载(支持部分,可用迅雷等多线程下载工具) 提供动态解析的接口 最后由于是本人练习所用写的,对HTTP协议的支持还是很不完善的,但是稳定性还是可以的,现在该程序运用在Minecraft...

    rest-rmr:RESTful RMR框架

    压缩,如果客户端指定了Accept-Encoding和/或TE:gzip,deflate或bzip2。 支持GET请求中的If-Modified-Since和If-None-Match标头。 正确的HTTP HEAD请求支持。 大多数情况下,正确的HTTP OPTIONS请求支持。 我想...

    Actix Web是一个小型,实用且快速的锈蚀Web框架。-C/C++开发

    支持的HTTP / 1.x和HTTP / 2.0协议流传输和流水线保持活动和慢速请求处理客户端/服务器WebSockets支持透明的内容压缩/解压缩(br,gzip,deflate)可配置的请求路由多部分流静态资产支持OpenSSL或SSL的静态资产

    roa:受koajs启发的异步Web框架,轻巧但功能强大

    透明内容压缩(br,gzip,deflate,zstd)。 可配置和可嵌套的路由器。 命名为uri参数(查询和路由器参数)。 Cookie和jwt支持。 HTTPS支持。 WebSocket支持。 异步多部分表单支持。 其他中间件(记录器,...

    AWStats- 非常好用Apache,vsftp日志分析工具

    * 网站压缩统计表(mod_gzip或者mod_deflate), * 使用的操作系统 (每个操作系统的页数,点击率 ,字节, 35 OS detected), * 使用的浏览器 (每个浏览器的页数,点击率,字节,,每个版本(Web, Wap、媒体浏览:97浏览、大于450...

    使用Awstats分析Nginx的访问日志.doc

    • 网站压缩统计表(mod_gzip 或者 mod_deflate), • 使用的操作系统 (每个操作系统的页数,点击率 ,字节, 35 OS detected), • 使用的浏览器, • 机器人访问(检测319个机器人), • 蠕虫攻击 (5个蠕虫家族), • 搜索...

    gsoap 2.8 (SOAP/XML 关于C/C++ 语言的自动化实现工具内附 CSharp webservice例子,及GSOAP client和server例子)

     ×gSOAP 支持 Zlib deflate and gzip compression(for HTTP, TCP/IP, and XML file storage)。  ×gSOAP 支持 SSL (HTTPS)。  ×gSOAP 支持 HTTP/1.0, HTTP/1.1 保持连接, 分块传输及基本验证。  ×gSOAP ...

Global site tag (gtag.js) - Google Analytics