将HTTP响应与其对应的HTTP流水线请求进行匹配

时间:2011-08-08 09:43:16

标签: http get http-headers httprequest pipelining

我正在尝试编写一个程序来匹配HTTP请求及其相应的响应。似乎一切都适用于大多数场景(当传输完全有序时,即使不是,通过使用TCP序列号)。

我找到的唯一问题是当我有流水线请求时。之后,我得到了几个响应,但我不知道哪个数据包是特定请求的答案,哪些不是。我在另一篇文章中读到,响应将按顺序进行,并将此属性与Content-Length字段的信息相结合似乎是一种解决方案。问题是内容长度不是必填字段,所以我不确定我是否总能依赖它。

是否有人知道支持此功能的网络浏览器(顺便说一句,其中大部分都不支持)实际上是如何做到的?

2 个答案:

答案 0 :(得分:2)

有关身体长度的信息必须出现在标题中。它并不总是在'内容长度'。为了完成所有工作,您必须学习相关的RFC 2616.最值得注意的是,第4.4节涉及不同的标题

来自RFC 2616的一些更相关的规则:

流水线时: 服务器必须按照收到请求的顺序发送对这些请求的响应。

从9.2起 如果不包含响应主体,则响应必须包含字段值为“0”的Content-Length字段。

从10.2.7 206部分内容
响应必须包括.... Content-Range头字段...或multipart / byteranges Content-Type包括每个部分的Content-Range字段。

从14.13内容长度 应用程序应该使用此字段来指示消息正文的传输长度,除非第4.4节中的规则禁止这样做。

答案 1 :(得分:1)

目前的回应有点旧。需要刷新。

新的HTTP 1.1 RFC RFC 7230 。并包含有关解析消息大小的更精确信息。

检测邮件的大小非常复杂。您可以拥有Content-lengthTransfer-Encoding: chunked,或两者都有,或者没有。还有一些像100 Continue这样的特殊代码可能会改变这一切。

第一个链接包含7个条目,应按正确的顺序检查以猜出正确的大小。

如上一个链接所述,未能检测到正确的消息长度可能会导致HTTP走私(分裂,缓存中毒)问题。

流水线支持是大多数走私问题的根源。如果要实现它,您应该真正处理整个RFC7230文档。