分块传输编码是 HTTP/1.1 的一个功能,它允许服务器逐步流式传输数据,而不需要提前知道总响应大小。这对于流式 API、实时更新和大型或动态生成的响应非常有用。在分块传输编码中,HTTP 响应被修改为一系列块,每个块前缀其字节大小。客户端逐步接收数据,并在出现零长度块时知道响应已经结束。使用 FastAPI 和 curl 的实践示例演示了分块传输编码的工作原理。该示例显示了每个块如何以十六进制形式开始其长度,后跟数据,然后在新行后开始下一个块。响应以零长度块结束,表明数据传输的结束。在幕后,Starlette 框架接收生成的数据段,并将每个块推送到基础 ASGI 服务器,该服务器根据 HTTP/1.1 分块传输编码规范对其进行格式化。HTTP/2 和 HTTP/3 不使用分块编码,而是使用一种更高效的二进制帧层,该层允许在单个连接上多路复用多个流。理解分块传输编码有助于构建更好的流式 API 并有效地调试复杂的 HTTP 交互。
dev.to
Deep Dive - How Chunked Transfer Encoding Works
