9

我对 Content-Encoding 和 Transfer-Encoding 的使用有疑问:

请让我知道我的以下理解是否正确:

客户端在其请求中可以使用 accept-encoding 标头指定它愿意接受的编码类型。因此,如果服务器希望在传输之前对消息进行编码,例如。gzip,它可以压缩实体(内容)并添加 content-encoding: gzip 并通过 HTTP 响应发送。在接收时,客户端可以接收并解压缩和解析实体。

在传输编码的情况下,客户端可以指定它愿意接受的编码类型并即时执行其操作。即如果客户端发送一个TE:gzip;q=1,这意味着如果服务器愿意,它可以使用 Transfer-Encoding: gzip 发送 200 OK 并且当它尝试发送流时,它可以压缩并发送,客户端在接收到内容后,可以即时解压缩和执行其解析。

我的理解在这里吗?请评论。

另外,动态压缩实体与先压缩实体然后传输它的基本优势是什么?传输编码是否仅对分块响应有效,因为我们在传输之前不知道实体的大小?

4

1 回答 1

14

区别真的不在于即时与否——内容编码既可以预先计算,也可以即时计算。

区别在于:

  • 传输编码是逐跳的,而不是端到端的
  • 除了“分块”(可悲)之外的传输编码在实践中没有实现
  • Transfer Encoding 在消息层,Content Encoding 在负载层
  • 使用内容编码会影响实体标签等。

请参阅http://greenbytes.de/tech/webdav/rfc7230.html#transfer.codingshttp://greenbytes.de/tech/webdav/rfc7231.html#data.encoding

于 2014-06-26T07:58:55.477 回答