对 Content-Encoding 和 Transfer-Encoding 的初级理解

搜到了几篇关于 Transfer-Encoding 的文章。以下是我的一些初级理解,赶紧记下来,明天别忘了。

我的理解

Content-Encoding 是用于在数据源和数据最终接收者之间传递编码方式的。中间代理(如果有的话)不会去试图解码,而只是原样传输。甚至最终接收者在保存内容的时候,也是原样保存的。典型的情况是 http 下载 gzip 格式的压缩包。

Transfer-Encoding 是用于两个传输节点之间传递“传输”编码方式的。两个节点要进行相对应的编码和解码。但不会改变原数据的编码。

例如,A 传输数据到 C,中间经过了代理 B 。 即,A -> B -> C 。其中,A 和 B 支持 gzip 编码,但 C 不支持 gzip 编码。则 A -> B 的过程,可以使用 Transfer-Encoding: gzip 进行传输,但 B 要做解码操作,然后把解码后的原数据直接传给 C 。具体步骤如下:

  1. A 生成需要传输的数据 d ;
  2. A 对 d 进行 gzip 编码得到 d1 ;
  3. A 把 d1 传输给 B (使用 Transfer-Encoding: gzip);
  4. B 接收 d1 ;
  5. B 解码 d1 得到原来的数据 d;
  6. B 把 d 传输个 C (不使用 Transfer-Encoding);
  7. C 接收 d 。

也就是说,Content-Encoding 描述了要传输的数据的某种属性;而 Transfer-Encoding 描述的是数据的传输方式,即数据进行某种编码后再传输,或者把数据分块后再传输。

下面是一些关于 Accept-Encoding、Content-Encoding、 TE、Transfer-Encoding 的资料。直接复制的这里的内容。

Some Links to RFC 2616

Note

Creative Commons License Except where otherwise noted, content on this site is licensed under a Creative Commons Attribution 4.0 International license .