傳輸編碼
Transfer-Encoding 頭部指定了用於在網路節點之間傳輸訊息的編碼形式。
警告:HTTP/2 不允許使用除 HTTP/2 特定的 "trailers" 之外的任何 Transfer-Encoding 頭部。HTTP/2 及更高版本提供了比分塊傳輸更高效的資料流機制,並禁止使用該頭部。在 HTTP/2 中使用該頭部可能會導致特定的 協議錯誤,因為 HTTP/2 協議禁止使用它。
Transfer-Encoding 是一個逐跳頭部,它應用於兩個節點之間的訊息,而不是資源本身。多節點連線的每個段可以使用不同的 Transfer-Encoding 值。如果要壓縮整個連線上的資料,請改用端到端的 Content-Encoding 頭部。
語法
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/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 表格僅在瀏覽器中載入
另請參閱
Accept-EncodingContent-EncodingContent-Length- 調節尾部使用的頭部欄位:
TE(請求)和Trailer(響應)。 - 分塊傳輸編碼