From cb205543207be34e1fa827abf093c73114848265 Mon Sep 17 00:00:00 2001 From: Jason Ren <40999116+jasonren0403@users.noreply.github.com> Date: Tue, 30 Jul 2024 15:03:28 +0800 Subject: [PATCH] [zh-cn] update `Transfer-Encoding` (#22797) Co-authored-by: A1lo --- .../http/headers/transfer-encoding/index.md | 55 +++++++++++-------- 1 file changed, 32 insertions(+), 23 deletions(-) diff --git a/files/zh-cn/web/http/headers/transfer-encoding/index.md b/files/zh-cn/web/http/headers/transfer-encoding/index.md index a4358edceb129a..08379dcae11e45 100644 --- a/files/zh-cn/web/http/headers/transfer-encoding/index.md +++ b/files/zh-cn/web/http/headers/transfer-encoding/index.md @@ -1,46 +1,57 @@ --- title: Transfer-Encoding slug: Web/HTTP/Headers/Transfer-Encoding +l10n: + sourceCommit: 0880a90f3811475d78bc4b2c344eb4146f25f66c --- {{HTTPSidebar}} -**`Transfer-Encoding`** 消息首部指明了将 {{Glossary("Entity header","entity")}} 安全传递给用户所采用的编码形式。 +**`Transfer-Encoding`** 标头指明了将{{Glossary("Payload body","有效负载体")}}安全传输给用户所采用的编码形式。 -`Transfer-Encoding` 是一个[逐跳传输消息首部](/zh-CN/docs/Web/HTTP/Headers#hbh),即仅应用于两个节点之间的消息传递,而不是所请求的资源本身。一个多节点连接中的每一段都可以应用不同的`Transfer-Encoding` 值。如果你想要将压缩后的数据应用于整个连接,那么请使用端到端传输消息首部 {{HTTPHeader("Content-Encoding")}} 。 +> **备注:** [HTTP/2](https://zh.wikipedia.org/wiki/HTTP/2) 禁止使用除 HTTP/2 特有的 `"trailers"` 以外的所有 Transfer-Encoding 标头。HTTP 2 提供了比分块传输更有效的数据流机制,并禁止使用该标头。在 HTTP/2 中使用该标头可能会导致特定的 `protocol error`,因为 HTTP/2 协议禁止使用该标头。 -当这个消息首部出现在 {{HTTPMethod("HEAD")}} 请求的响应中,而这样的响应没有消息体,那么它其实指的是应用在相应的 {{HTTPMethod("GET")}} 请求的应答的值。 +`Transfer-Encoding` 是一个[逐跳传输标头](/zh-CN/docs/Web/HTTP/Headers#逐跳(hop-by-hop)标头),即仅应用于两个节点之间的消息传递,而不是所请求的资源本身。一个多节点连接中的每一段都可以应用不同的 `Transfer-Encoding` 值。如果你想要将压缩后的数据应用于整个连接,那么请使用端到端标头 {{HTTPHeader("Content-Encoding")}}。 -| Header type | {{Glossary("Response header")}} | -| ------------------------------------- | ------------------------------- | -| {{Glossary("Forbidden header name")}} | yes | +当这个标头出现在 {{HTTPMethod("HEAD")}} 请求的响应中,而这样的响应没有消息体,那么它其实指的是应用在相应的 {{HTTPMethod("GET")}} 请求的应答的值。 + + + + + + + + + + + + +
标头类型 + {{Glossary("Request header", "请求标头")}}、{{Glossary("Response header", "响应标头")}}、{{Glossary("Payload header", "有效负载标头")}} +
{{Glossary("Forbidden header name", "禁止修改的标头")}}
## 语法 -```plain +```http Transfer-Encoding: chunked Transfer-Encoding: compress Transfer-Encoding: deflate Transfer-Encoding: gzip -Transfer-Encoding: identity -// Several values can be listed, separated by a comma +// 可以列出多个值,用逗号分割 Transfer-Encoding: gzip, chunked ``` ## 指令 - `chunked` - - : 数据以一系列分块的形式进行发送。 {{HTTPHeader("Content-Length")}} 首部在这种情况下不被发送。在每一个分块的开头需要添加当前分块的长度,以十六进制的形式表示,后面紧跟着 '`\r\n`' ,之后是分块本身,后面也是'`\r\n`' 。终止块是一个常规的分块,不同之处在于其长度为 0。终止块后面是一个挂载(trailer),由一系列(或者为空)的实体消息首部构成。 + - : 数据以一系列分块的形式进行发送。{{HTTPHeader("Content-Length")}} 标头在这种情况下不被发送。在每一个分块的开头需要添加当前分块的长度,以十六进制的形式表示,后面紧跟着“`\r\n`”,之后是分块本身,后面也是“`\r\n`”。终止块是一个常规的分块,不同之处在于其长度为 0。终止块后面是一个挂载(trailer),由一系列的标头(可能为空)构成。 - `compress` - - : 采用 [Lempel-Ziv-Welch](http://en.wikipedia.org/wiki/LZW) (LZW) 压缩算法。这个名称来自 UNIX 系统的 _compress_ 程序,该程序实现了前述算法。 - 与其同名程序已经在大部分 UNIX 发行版中消失一样,这种内容编码方式已经被大部分浏览器弃用,部分因为专利问题(这项专利在 2003 年到期)。 + - : 采用 [Lempel-Ziv-Welch](http://zh.wikipedia.org/wiki/LZW)(LZW)压缩算法。这个名称来自 UNIX 系统的 _compress_ 程序,该程序实现了前述算法。与已从大多数 UNIX 发行版中消失的 compress 程序一样,如今几乎没有浏览器使用这种内容编码,部分原因是专利问题(2003 年到期)。 - `deflate` - - : 采用 [zlib](http://en.wikipedia.org/wiki/Zlib) 结构 (在 [RFC 1950](http://tools.ietf.org/html/rfc1950) 中规定),和 [_deflate_](http://en.wikipedia.org/wiki/DEFLATE) 压缩算法 (在 [RFC 1951](http://tools.ietf.org/html/rfc1952) 中规定)。 + - : 采用 [zlib](http://zh.wikipedia.org/wiki/Zlib) 结构(于 [RFC 1950](http://tools.ietf.org/html/rfc1950) 定义)和 [_deflate_](https://zh.wikipedia.org/wiki/Deflate) 压缩算法(于 [RFC 1951](http://tools.ietf.org/html/rfc1952) 定义)。 - `gzip` - - : 表示采用 [Lempel-Ziv coding](http://en.wikipedia.org/wiki/LZ77_and_LZ78#LZ77) (LZ77) 压缩算法,以及 32 位 CRC 校验的编码方式。这个编码方式最初由 UNIX 平台上的 _gzip_ 程序采用。处于兼容性的考虑,HTTP/1.1 标准提议支持这种编码方式的服务器应该识别作为别名的 `x-gzip` 指令。 -- `identity` - - : 用于指代自身(例如:未经过压缩和修改)。除非特别指明,这个标记始终可以被接受。 + - : 表示采用 [Lempel-Ziv coding](https://zh.wikipedia.org/wiki/LZ77与LZ78#LZ77)(LZ77)压缩算法,以及 32 位 CRC 校验的编码方式。这个编码方式最初由 UNIX 平台上的 _gzip_ 程序采用。出于兼容性的考虑,HTTP/1.1 标准提议支持这种编码方式的服务器应该识别作为别名的 `x-gzip` 指令。 ## 示例 @@ -48,17 +59,15 @@ Transfer-Encoding: gzip, chunked 分块编码主要应用于如下场景,即要传输大量的数据,但是在请求在没有被处理完之前响应的长度是无法获得的。例如,当需要用从数据库中查询获得的数据生成一个大的 HTML 表格的时候,或者需要传输大量的图片的时候。一个分块响应形式如下: -```plain +```http HTTP/1.1 200 OK Content-Type: text/plain Transfer-Encoding: chunked 7\r\n Mozilla\r\n -9\r\n -Developer\r\n -7\r\n -Network\r\n +11\r\n +Developer Network\r\n 0\r\n \r\n ``` @@ -76,5 +85,5 @@ Network\r\n - {{HTTPHeader("Accept-Encoding")}} - {{HTTPHeader("Content-Encoding")}} - {{HTTPHeader("Content-Length")}} -- Header fields that regulate the use of trailers: {{HTTPHeader("TE")}} (requests) and {{HTTPHeader("Trailer")}} (responses). -- [Chunked transfer encoding](https://en.wikipedia.org/wiki/Chunked_transfer_encoding) +- 规范挂载使用的标头字段:{{HTTPHeader("TE")}}(请求)和 {{HTTPHeader("Trailer")}}(响应)。 +- [分块传输编码](https://zh.wikipedia.org/wiki/分块传输编码)