- 持续连接的问题:对于非持续连接浏览器可以通过连接是否关闭来界定请求或响应实体的边界;而对于持续连接,这种方法显然不奏效有时,尽管我已经发送完所有數据但浏览器并不知道这一点,它无法得知这个打开的连接上是否还会有新数据进来只能傻傻地等了。
- 用Content-length解决:计算实体长度并通過头部告诉对方。浏览器可以通过 Content-Length 的长度信息判断出响应实体已结束
- Content-length引入的新问题:由于 Content-Length 字段必须真实反映实体长度,但是对于动态生荿的内容来说在内容创建完之前,长度是不可知的这时候要想准确获取长度,只能开一个足够大的 buffer等内容全部生成好再计算。但这樣做一方面需要更大的内存开销另一方面也会让客户端等更久。
- 我们需要一个新的机制:不依赖头部的长度信息也能知道实体的边界——分块编码(Transfer-Encoding: chunked)
- Transfer-Encoding,是一个 HTTP 头部字段(响应头域)字面意思是「传输编码」。最新的 HTTP 规范里只定义了一种编码传输:分块编码(chunked)。