HTTP内容编码Content-Encoding

843 阅读1分钟

定义:

HTTP定义了一些标准的内容编码类型,我们说HTTP压缩,其实就是HTTP内容编码的一种。

流程

  1. 用户在request的header设置支持的类型,Accept-Encoding: gzip, deflate。 (告诉服务器, 浏览器支持gzip压缩)
  2. 服务器拿到请求后,生成 reponse(含有原来的ContentType和Content-Length)
  3. 服务端通过预设的配置,如nginx gzip on,使用gzip压缩reponse,并调整ContentType和Content-Length信息,把压缩后的reponse 加上Content-Encoding:gzip 返回客户端
  4. 浏览器 根据Content-Encoding:gzip 解压,还原出原来的reponse,显示出网页内容。

种类

  1. gzip  表明实体采用GNU zip编码
  2. compress 表明实体采用Unix的文件压缩程序
  3. deflate  表明实体是用zlib的格式压缩的
  4. identity  表明没有对实体进行编码。当没有Content-Encoding header时, 就默认为这种情况
  5. br  表明没有对实体进行编码。当没有Content-Encoding header时, 就默认为这种情况

gzip, compress, 以及deflate编码都是无损压缩算法,用于减少传输报文的大小,不会导致信息损失。 其中gzip通常效率最高, 使用最为广泛。

br:

Brotli 通过变种的 LZ77 算法、Huffman 编码以及二阶文本建模等方式进行数据压缩,与其他压缩算法相比,它有着更高的压塑压缩效率。启用 Brotli 压缩算法,对比 Gzip 压缩 CDN 流量再减少 20%。

需要https 支持