我目前正在编写一个低级 HTTP 解析器,并遇到了以下问题:
我正在逐包接收 HTTP 数据,即一次一个 TCP 有效负载。解析此数据时,我使用搜索 CRLF 的 HTTP 协议(protocol)标准来描述 header 行、 block 数据(在分块编码的情况下)以及双 CRLF 来描述 header 与正文。
我的问题是:我是否需要担心 CRLF 被分割到两个 TCP 数据包有效负载之间的可能性?例如,HTTP header 将以 CRLFCRLF 结束。有没有可能后续的两个TCP数据包都会有CR,然后是LFCRLF?
我假设是的;这是一个值得担心的情况,因为应用程序(HTTP)和 TCP 层彼此相当独立。
任何对此的见解将不胜感激,谢谢!
最佳答案
是的,CRLF 可能会被分割成不同的 TCP 数据包。试想一下单个 HTTP header 比 TCP MTU 长一个字节的可能性。在这种情况下,只有 CR 的空间,而没有 NL 的空间。
因此,无论您的代码变得多么棘手,它都必须能够处理这种拆分情况。
关于http - 在 TCP 负载之间分割 CRLF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7276407/