带有HTTP数据的TCP段

时间:2013-04-04 12:56:49

标签: parsing http tcp

我正在实现一个http解析器;作为http数据的指标我正在搜索'HTTP / 1。? CRLF'在流中。 TCP层可以将应用程序提供的缓冲区切割成适合通过网络传输的块。是否有可能在TCP标头之后立即跟踪http数据(例如GET http://www.google.com/index.html HTTP / 1.1 CRLF)?另外,是否可以将例如'GET ..'查询拆分为TCP段?

感谢。

标记

2 个答案:

答案 0 :(得分:3)

使用TCP,你需要基本上假设分割可以在任何地方发生。在设计解析堆栈时必须考虑这一点。您无法读取一个片段并假设您有足够的内容来阅读。所以明智的方法是将TCP视为一个流并将其放在你的词法分析器下面。您只需要适应对解析器/词法分析器的调用可能需要更长时间或故障的事实。

答案 1 :(得分:3)

  

是否可以在TCP标头之后立即跟踪http数据(例如GET http://www.google.com/index.html HTTP / 1.1 CRLF)?

可能是的。 HTTP Pipelining可以在一个细分中提供多个请求。

  

此外,是否有可能将“GET ..”查询拆分为TCP段?

是。请求大小可能大于段大小。此外,TCP段的碎片可能发生在IP层。

这可能是一种罕见的自然现象,但可能是故意逃避的一部分。

确保唯一的方法是重新组合流,但这在处理和内存方面是昂贵的。如果您非常关心,最好使用透明的HTTP代理。