zoukankan      html  css  js  c++  java
  • 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时,会对其进行编码。 如下图。

     转自:https://www.cnblogs.com/xuzhudong/p/8486761.html

  • 相关阅读:
    CF666E. Forensic Examination
    bzoj1396 识别子串
    bzoj2839 集合计数
    unknown
    Hibernate中一级缓存和二级缓存
    亲, 我们来再重申一遍"=="和"equals的区别
    BigDecimal类
    序列化详解
    利用简单的参数传递来实现单条查询的easyui-datagrid
    Oracl 动态执行表不可访问,本会话的自动统计被禁止
  • 原文地址:https://www.cnblogs.com/lcword/p/15309399.html
Copyright © 2011-2022 走看看