繁体   English   中英

HTTP客户端应如何正确解析“块式” HTTP响应主体?

[英]How should an HTTP client properly parse *chunked* HTTP response body?

当采用分块HTTP传输编码,为什么服务器需要写出两个块大小以字节为单位,并与CRLF后续块数据结束了吗?

这是否会使发送二进制数据“ CRLF-unclean”和该方法有点多余?

如果数据某处有一个0x0A,然后是0x0D,该怎么办(即,这些实际上是数据的一部分)? 那么,客户端是否应该遵循在数据块顶部显式提供的数据块大小,或者在数据中遇到的第一个CRLF上阻塞呢?

到目前为止,我对预期的客户端行为的理解是简单地获取服务器提供的块大小,前进到下一行,然后从以下数据(CRLF或其中没有CRLF)中精确读取此字节数,然后跳过CRLF跟随数据并重复该过程,直到没有更多块为止。 这是合规行为吗? 如果是这样,那么每个数据块之后CRLF的意义是什么? 可读性?

我已经对此进行了一些Web搜索,还阅读了HTTP 1.1规范,但是似乎无法确定的答案。

分块的使用者不扫描消息正文以查找CRLF对。 它首先读取指定数量的字节, 然后再读取两个字节以确认它们是CR和LF。 如果不是,则消息正文格式不正确,或者大小指定不正确,否则数据已损坏。

尾随CRLF是皮带和尾部保证(根据RFC 2616第3.6.1节块传输编码 ),但是它也用于保持字段从行首开始的一致规则。

每个块之后的CRLF可能只是为了提高可读性,因为由于每个块开头的块大小而不必这样做。 但是“块头”后面的CRLF是必需的,因为在块大小之后可能还会有其他信息(请参见块传输编码 ):

  chunk = chunk-size [ chunk-extension ] CRLF chunk-data CRLF 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM