http - 在 TCP 负载之间分割 CRLF

标签 http parsing tcp newline

我目前正在编写一个低级 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/

相关文章:

c++ - 是否可以使用 WFP 发送带有有效负载的 tcp syn 数据包?

string - 从字节缓冲区传输到 AnsiString 时丢失数据

sql-server - 使用 Plesk 远程访问 MSSQL 数据库

javascript - 是否可以强制用户的浏览器发出(并遵循)正文中包含 JSON 的 GET 请求?

java - 如何修复此正则表达式(匹配字典条目)

java - 使用默认方法解析字符串

c - 我的代码最优化的 strstr() 类函数

http - 如何在 HTTP GET 请求中发送原始数据?

php - 使用 PHP 将 Android 应用程序连接到外部 MySQL 数据库

xcode - 如何解决意外的 HTTP 状态代码 : 404(-1)