对 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