HTTP 传输内容的压缩


HTTP 压缩,在 HTTP 协议中,其实是内容编码的一种。
在 HTTP 协议中,可以对内容(也就是 body 部分)进行编码,可以采用 gzip 这样的编码,从而达到压缩的目的。也可以使用其他的编码把内容搅乱或加密,以此来防止未授权的第三方看到文档的内容。
所以 HTTP 压缩,其实就是 HTTP 内容编码的一种。
HTTP 压缩是指: Web 服务器和浏览器之间压缩传输的"文本内容"的方法。HTTP 采用通用的压缩算法,比如 gzip 来压缩
HTML、JavaScript、CSS 文件。能大大减少网络传输的数据量,提高了用户显示网页的速度。
首先,浏览器发送一个请求(request)给 Web 服务器,支持一个压缩格式如(gzip),服务端会将原来的源码压缩之后,通过
HTTP 响应(response)信息返回给 Web 浏览器,浏览器接收之后,显示出来。

HTTP 压缩的过程:
1.浏览器发送 HTTP Request 给 Web 服务器,Request 中有 Accept-Encoding:gzip、deflate。
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 后,然后显示出网页。

http压缩过程

内容编码类型:
HTTP 定义了一些标准的内容编码类型,并允许用扩展的形式添加更多的编码。
Content-Encoding header 就用这些标准化的代号来说明编码时使用的算法
Content-Encoding 值
gzip 表明实体采用 GNU zip 编码
compress 表明实体采用 Unix 的文件压缩程序
deflate 表明实体是用 zlib 的格式压缩的
identity 表明没有对实体进行编码,当没有 Content-Encoding header 时,就默认为这种情况。
gzip、compress 以及 deflate 编码都是无损压缩算法,用于减少传输报文的大小,不会导致信息损失。其中gzip通常效率最高,使用最为广泛。

压缩的好处:
HTTP 压缩对纯文本可以压缩至原内容的40%, 从而节省了60%的数据传输。
gzip 的缺点:JPEG 这类文件用 gzip 压缩的不够好。

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

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

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

分享:

评论