这个大小是包含了所有内容编码的, 比如, 对文本文件进行了gzip压缩的话, Content-Length首部指的就是压缩后的大小而不是原始大小....但, 仅仅是如此吗, 当然不, 我们再来看看第二次请求会发生什么让人意外的事情, 如图:
?...在wireshark中可以很清晰地看到chunked的数据, 其结构大致是: 返回的消息被分为多个数据块, 每个数据块有两部分, 长度 + 数据, 这两部分都以CRLF(即\r\n)结尾....而终止块是一个特殊的数据块, 其长度为0, 如图:
?
如此, 即完成了分块编码. 其主要应用于如下场景, 即要传输大量的数据, 但是在请求在没有被处理完之前响应的长度是无法获得的....例如, 当需要用从数据库中查询获得的数据生成一个大的HTML表格、需要传输大量的图片等.
结语
Content-Length如果存在且生效, 必须是正确的, 否则会发生异常.