Transfer-Encoding: chunked的作用

Transfer-Encoding: chunked 是 HTTP 协议中常见的一个头部字段,用于指示数据以分块传输编码(Chunked Transfer Encoding)的方式传输。

分块传输编码的作用

1. 动态生成内容 当服务器无法预先知道要发送的数据总长度(例如动态生成的内容或流式数据)时,无法使用 [Content-Length](https://zhida.zhihu.com/search?content_id=254918266&content_type=Article&match_order=1&q=Content-Length&zhida_source=entity) 头部。此时可以通过 chunked 分块传输,逐步发送数据。

2. 流式传输 允许服务器在生成数据的同时逐步传输,无需等待所有数据就绪后再发送,提升效率(例如实时日志、视频流)。

3. 避免大内存占用

适用于大文件或长连接场景,避免一次性加载全部数据到内存。

分块传输的格式

数据会被分成多个块(chunk),每个块的格式如下:


<十六进制表示的块长度>\r\n

<块数据>\r\n

所有块传输完成后,发送一个长度为 0 的块作为结束标志:


0\r\n

\r\n

示例


HTTP/1.1 200 OK

Transfer-Encoding: chunked

7\r\n

Hello, \r\n

6\r\n

world!\r\n

0\r\n

\r\n

最终客户端会将所有块拼接为 Hello, world!

Content-Length 的区别

  • Content-Length 需要提前知道数据总长度,适用于静态内容。

  • Transfer-Encoding: chunked 无需提前知道长度,适用于动态或流式内容。

注意事项

1. 客户端兼容性

现代浏览器和 HTTP 客户端均支持分块传输编码。

2. 无法与 Content-Length 共存

如果使用了 Transfer-Encoding: chunked,响应头中不应包含 Content-Length

3. 压缩与编码

分块传输编码可以与其他编码(如 gzip)结合使用,但需明确区分 Transfer-EncodingContent-Encoding

如果是在调试网络请求时看到 Transfer-Encoding: chunked,它表示服务器正在以分块形式传输数据,这是 HTTP/1.1 的常见行为。

转发自 (https://zhuanlan.zhihu.com/p/29478823863)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容