当前位置: 代码迷 >> Web前端 >> 对 Content-Encoding 跟 Transfer-Encoding 的初级理解
  详细解决方案

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

热度:631   发布时间:2013-01-26 13:47:02.0
对 Content-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
======================

* 3.5  Content Codings

  http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.5

* 3.6  Transfer Codings

  http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.6

* 4.3  Message Body

  http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.3

* 14.3  Accept-Encoding

  http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.3

* 14.11 Content-Encoding

  http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.11

* 14.39 TE

  http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.39

* 14.41 Transfer-Encoding

  http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.41


Note
====

* The changes from RFC 2068 regarding transfer codings

  http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html#sec19.6.3
  相关解决方案