传输编码

Transfer-Encoding 头部指定了用于在网络节点之间传输消息的编码形式。

警告:HTTP/2 不允许使用除 HTTP/2 特定的 "trailers" 之外的任何 Transfer-Encoding 头部。HTTP/2 及更高版本提供了比分块传输更高效的数据流机制,并禁止使用该头部。在 HTTP/2 中使用该头部可能会导致特定的 协议错误,因为 HTTP/2 协议禁止使用它。

Transfer-Encoding 是一个逐跳头部,它应用于两个节点之间的消息,而不是资源本身。多节点连接的每个段可以使用不同的 Transfer-Encoding 值。如果要压缩整个连接上的数据,请改用端到端的 Content-Encoding 头部。

当出现在对没有正文的 HEAD 请求的响应中时,它表示将应用于相应 GET 消息的值。

头部类型 请求头部响应头部内容头部
禁止的头部名称

语法

http
Transfer-Encoding: chunked
Transfer-Encoding: compress
Transfer-Encoding: deflate
Transfer-Encoding: gzip

// Several values can be listed, separated by a comma
Transfer-Encoding: gzip, chunked

指令

分块

数据以一系列块的形式发送。在这种情况下,Content-Length 头部将被省略,并且在每个块的开头,您需要添加当前块的长度(以十六进制格式),后跟 '\r\n',然后是块本身,后跟另一个 '\r\n'。终止块是一个常规块,但其长度为零。它后面跟着尾部,尾部由一个(可能是空的)头部字段序列组成。

压缩

使用 Lempel-Ziv-Welch (LZW) 算法的格式。值名称取自 UNIX 的 compress 程序,该程序实现了此算法。与已从大多数 UNIX 发行版中消失的 compress 程序一样,这种内容编码如今几乎没有浏览器使用,部分原因是专利问题(已于 2003 年过期)。

deflate

使用 zlib 结构(在 RFC 1950 中定义),以及 deflate 压缩算法(在 RFC 1951 中定义)。

gzip

使用 Lempel-Ziv 编码 (LZ77),带有 32 位 CRC。这最初是 UNIX gzip 程序的格式。HTTP/1.1 标准还建议支持此内容编码的服务器应识别 x-gzip 作为别名,以实现兼容性。

示例

分块编码

当向客户端发送大量数据并且响应的总大小可能在请求完全处理之前未知时,分块编码非常有用。例如,当生成数据库查询产生的大型 HTML 表格或传输大型图像时。分块响应如下所示

http
HTTP/1.1 200 OK
Content-Type: text/plain
Transfer-Encoding: chunked

7\r\n
Mozilla\r\n
11\r\n
Developer Network\r\n
0\r\n
\r\n

规范

规范
HTTP/1.1
# field.transfer-encoding

浏览器兼容性

BCD 表格仅在浏览器中加载

另请参阅