一般服务器响应消息都会在HTTP响应头部加上Content-Length
,这样客户端就知道要接收多少数据。这也要求一定要先发送响应头部,再发送响应内容。
但并不是所有场景都能事先知道响应包长度,比如动态页面,事先并不知晓响应包大小,这样也无法在响应头部设置Content-Length
,这时可通过chunked来进行传输。
那么通过chunked方式传输时,客户端如何感知包传输完了呢?
一个chunk包有两部分组成:前部分为包大小,后部分为包内容。当包的大小为0时,当客户端收到一个包大小为0的chunk包时,表示包传输完了。
chunk包格式:
[chunk size][\r\n][chunk data][\r\n]