分块传输编码是 HTTP/1.1 的一种数据传输机制,允许服务器在不预先知道响应总长度的情况下,把响应体拆成若干块依次发送。它使动态生成的内容能够边生成边发送,无需缓冲整个响应。

| 中文名 | 分块传输编码 |
| 英文名 | Chunked Transfer Encoding |
| 所属协议 | HTTP/1.1 |
| 标识头 | Transfer-Encoding: chunked |
| 结束标志 | 长度为零的块 |
分块传输编码(Chunked Transfer Encoding)是 HTTP/1.1 定义的一种消息体传输方式,通过在响应头中设置 Transfer-Encoding 为 chunked,服务器可以将响应体分割成一系列大小不定的数据块逐个发送,而不必在发送前计算出整个响应的字节长度。
在传统的 HTTP 传输中,服务器需要通过 Content-Length 头告知客户端响应体的确切字节数。但对于动态生成的内容,例如数据库查询结果或实时拼接的页面,服务器在开始发送时往往还不知道最终长度。分块传输编码正是为解决这一问题而设计,它让服务器能够一边生成内容一边发送。
采用分块编码时,每个数据块由两部分组成:先是一行以十六进制表示的块长度,紧接着是该长度的实际数据,块与块之间以回车换行分隔。
由于长度信息内嵌在数据流中,客户端能够准确判断每一块的边界以及整个响应何时结束,从而正确重组完整的消息体。
分块传输编码广泛用于流式输出场景,例如服务器实时推送日志、大文件动态压缩后下载、模板引擎边渲染边输出的网页,以及各类需要长连接持续下发数据的接口。它也是实现服务器推送事件和某些流式接口的底层基础。需要注意的是,HTTP/2 与 HTTP/3 采用了帧机制来划分数据,不再使用这种编码方式。
问:分块传输和 Content-Length 能同时使用吗?答:不能。协议规定二者互斥,一旦使用分块编码就不应再设置 Content-Length,否则会造成长度歧义,部分服务器和代理会因此拒绝请求或产生安全隐患。
问:分块编码会不会影响下载进度显示?答:会。因为事先不知道总大小,浏览器通常无法显示精确的下载百分比,只能显示已接收字节数。

| 中文名 | 分块传输编码 |
| 英文名 | Chunked Transfer Encoding |
| 所属协议 | HTTP/1.1 |
| 标识头 | Transfer-Encoding: chunked |
| 结束标志 | 长度为零的块 |
登录 后参与讨论
暂无讨论,来发表第一条评论吧