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

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

 
分享到:
评论

相关推荐

    使用libcurl获取经过gzip压缩的网页文件

    libcurl是一个强大的URL传输库,它支持多种协议,包括HTTP,能够处理经gzip压缩的数据。本文将深入探讨如何使用libcurl获取并解压这些经过gzip压缩的网页文件。 首先,理解libcurl的基本工作原理。libcurl是一个...

    gzip-1.8.tar.gz

    gzip是一款广泛使用的命令行工具,基于GNU项目,实现了DEFLATE压缩算法。DEFLATE是一种结合了LZ77压缩和哈夫曼编码的高效数据压缩方法。 在编译SDK时,开发者经常需要依赖第三方库来扩展功能或提供特定的服务。gzip...

    Gzip压缩软件(gz文件压缩)

    在开发环境中,gzip也常用于HTTP压缩,服务器可以根据浏览器的支持情况发送gz压缩过的HTML、CSS、JavaScript等静态资源,减少网络传输的数据量,提高页面加载速度。此外,许多版本控制系统如Git也支持对提交的文件...

    c-deflate:根据https的Deflate解压缩器

    在提供的"压缩包子文件的文件名称列表"中,"c-deflate-main"可能是解压缩器的主要源代码文件,包含了整个程序的入口点和核心解压缩逻辑。分析这个文件的内容,可以进一步理解解压缩器的工作原理,找出可能的问题所在...

    gzip-1.3.9.tar

    - **数据压缩**:gzip 使用 DEFLATE 算法,这是一种结合了 LZ77 和 Huffman 编码的压缩方法,既保留了匹配查找的速度,又利用了 Huffman 编码的有效性。 2. **gzip 功能**: - **压缩文件**:gzip 可以将单个文件...

    GZIP_gzip_

    GZIP格式通常用于在网络上传输数据,比如HTTP协议中的gzip压缩,可以显著减少网络带宽的消耗。它也常被用在文件备份、归档和软件安装包中,以节省存储空间。GZIP文件通常具有.gz扩展名,可以通过各种工具进行压缩...

    网页GZIP压缩检测例子-易语言

    在HTTP协议中,客户端可以通过设置`Accept-Encoding`头部来告知服务器它支持的压缩格式,如`gzip, deflate`等。服务器根据这个信息决定是否启用GZIP压缩。同样,服务器在响应中会通过`Content-Encoding`头部告知...

    gzip压缩程序

    在网络传输中,HTTP协议支持gzip压缩,服务器可以自动对响应内容进行gzip压缩,减少数据传输量,提高网页加载速度。 在分布式计算环境如Hadoop中,gzip也被广泛应用。Hadoop的MapReduce框架可以直接处理gzip压缩的...

    php gzip压缩输出的实现方法

    客户端是否支持gzip压缩可以通过HTTP请求头中的Accept-Encoding信息来判断,如果包含gzip或deflate,表示浏览器支持相应类型的压缩。 在服务器配置中,可以通过修改http.conf文件或者.htaccess文件来启用gzip压缩...

    VC6 gzip 压缩解压 测试代码 使用gzip.dll

    gzip是一种广泛应用于网络数据传输的压缩格式,它基于Deflate算法,能够有效地减小文件大小,从而提高传输效率。Windows 2003系统自带的gzip库为开发者提供了便利,使得在VC6环境下集成gzip功能成为可能。 首先,要...

    关于Gzip压缩js文件提高网站运行速度

    Gzip是一种广泛使用的数据压缩算法,尤其适用于HTTP传输,因为它可以有效减少网络带宽的消耗。 **Gzip压缩原理** Gzip工作原理基于LZ77(Lempel-Ziv)压缩算法,它通过查找文本中的重复模式并用更短的编码代替,...

    gzip-1.9.zip

    8. **在HTTP中的应用**:HTTP协议支持gzip压缩,服务器可以通过发送gzipped内容来减少网络传输的数据量,提高网页加载速度。 9. **压缩比比较**:虽然gzip在许多情况下提供了良好的压缩率,但与其他压缩工具(如...

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

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

    MFC实现带压缩功能HTTP请求

    在IT行业中,MFC(Microsoft ...总的来说,实现MFC中的带压缩功能HTTP请求涉及到对HTTP协议的理解,MFC类库的使用,以及GZIP压缩和解压缩的实现。这个过程需要结合zlib库和其他优化技术,以确保高效、可靠的传输。

    含有zip.lzw.gzip等多种压缩算法的程序

    gzip被广泛应用于Unix-like系统和网络传输,例如HTTP和FTP协议支持gzip压缩以减少数据传输量。在Web开发中,服务器通常会使用gzip压缩响应内容,以降低带宽使用和提高页面加载速度。 这些压缩算法各有特点,zip适合...

    windowsphone Gzip 压缩

    HTTP协议允许通过设置"Accept-Encoding: gzip"头来告知服务器客户端支持Gzip压缩。当服务器返回Gzip压缩的响应时,你可以使用HttpWebRequest或HttpClient类的相应方法来自动解压缩数据,如以下示例所示: ```csharp...

    Java压缩技术(五) GZIP相关——浏览器解析

    首先,GZIP是一种基于DEFLATE算法的压缩格式,它被广泛应用于HTTP协议的压缩传输。在Java中,我们可以使用`java.util.zip.GZIPOutputStream`和`java.util.zip.GZIPInputStream`类来对数据进行压缩和解压缩。这两个类...

    zlib 压缩函数库

    它提供了高效且灵活的压缩和解压缩功能,支持多种数据格式,包括著名的gzip和deflate算法。zlib库不仅在互联网传输(如HTTP和FTP)中用于减小数据量,还在文件存档、软件开发和系统工具中得到广泛应用。 **核心功能...

    Python-gzipencoding实例如何压缩HTTP请求发送到web服务并处理

    gzip是一种基于DEFLATE算法的压缩格式,广泛应用于HTTP协议中,以减少网络传输的带宽需求。在Python中,我们可以使用内置的`gzip`模块来进行数据的压缩和解压。 1. **使用requests库进行HTTP请求**: Python的`...

    行业分类-设备装置-按网络协议对字节流进行压缩的方法.zip

    例如,某些网络设备可能采用ZLIB库进行DEFLATE压缩,或者使用GZIP格式对HTTP响应进行压缩。这些库通常提供了接口,允许开发者根据网络协议的特性选择合适的压缩级别和算法。 文件“按网络协议对字节流进行压缩的...

Global site tag (gtag.js) - Google Analytics