当使用分块http传输编码时,为什么服务器需要以字节为单位写出分块大小,并让后续的分块数据以crlf结尾?
这难道不让发送二进制数据“crlf unclean”和方法有点多余吗?
如果数据中有一个0x0a后跟0x0d(即这些实际上是数据的一部分),该怎么办?那么,客户机是否应该遵守在块头显式提供的块大小,或者在数据中遇到的第一个crlf时阻塞?
到目前为止,我对预期的客户机行为的理解是,只需获取服务器提供的块大小,转到下一行,然后从下面的数据(crlf或其中没有crlf)中准确读取这个字节数,然后跳过数据后面的crlf并重复该过程,直到没有更多的块。这种行为合规吗?如果是,那么crlf在每个数据块之后的意义是什么?可读性?
我对此做了一些网络搜索,也阅读了一些http 1.1规范,但我似乎没有找到一个明确的答案。
最佳答案
分块的使用者不会扫描邮件正文以查找CRLF对。它首先读取指定的字节数,然后再读取两个字节以确认它们是CR和LF。如果不是,则消息正文格式错误,或者大小指定不正确,或者数据已损坏。
尾部crlf是一个安全带和吊杆保证(根据RFC 2616 section 3.6.1,分块传输编码),但它也有助于保持字段从行开始的一致规则。
关于http - HTTP客户端应如何正确解析“块式” HTTP响应主体?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2127637/