Http请求中的Transfer-Encoding: chunked

最近使用Socket实现一个抓包工具,在对Http协议进行解析时,遇到了获取完整Http报文的问题,总结如下:

  1. 短连接:如果没有启用keepalive,可以通过判断连接状态界定报文实体的边界;
  2. 请求头中有Content-length,根据该字段值,得到请求实体的长度;
  3. 请求头中有Transfer-Encoding: chunked,代表该请求是分块的,也是本文介绍的重点:
    3.1 分块编码仅在http 1.1协议中有效;
    3.2 在每段数据块前,使用 “[数据块长度]\r\n” 来标记接下来数据块的长度;
    3.3 最后一个数据块的长度必须为0,也可以理解为http报文以0\r\n\r\n来结尾。

通过以上三点描述,我们既可以安全完整的从TCP报文中解析出http报文

你可能感兴趣的:(Http请求中的Transfer-Encoding: chunked)