即使数据包大小之和仍然小于最大段大小,在什么情况下,您会期望Web浏览器将HTTP请求分成两个IP数据包? 我会假设这将始终作为一个单一的数据包发送,但我的经验显示,否则。
使用Microsoftnetworking监视器分析HTTPstream量,我偶尔会看到一个分为两个IP数据包的请求,如下所示
HTTP:Request, POST /foobar.htm (PacketID=55178, TotalLength=528) POST /foobar.htm HTTP/1.1 Content-Type: application/x-www-form-urlencoded ...etc... HTTP:HTTP Payload, URL: /foo.htm (PacketID=55179, TotalLength=98) param1=foo¶m2=bar¶m3=foo+bar
到目前为止,我只在Windows XP客户端上看到过这种情况,但在所有XP客户端上都不会发生这种情况。 而在受影响的系统上,IE8和Firefox都performance出相同的双包行为。
一些情况:我们最近开始使用第三方软件包,在我们的Intranet上提供一个Web应用程序。 但不是使用像IIS或Apache这样的真正的Web服务器,软件在内部实现了自己的HTTP服务器。
由于服务器使用HTTP的一个天真的实现,它只检查HTTP请求的第一个数据包,并错过在第二个数据包中发送的参数。 这会导致请求失败。
这是随机的,不可预知的,如果你在乎,你正在做一些可怕的错误。
由于服务器使用HTTP的一个天真的实现,它只检查HTTP请求的第一个数据包,并错过在第二个数据包中发送的参数。 这会导致请求失败。
我无法弄清楚你想在那里说什么。 如果实际上是在查看数据包,那么这是TCP的实现,而不是HTTP(因为数据包是根据TCP规范的数据包)。 一个明智的HTTP实现永远不会看数据包。
如果你的意思是HTTP服务器查看数据包,那么它必须重buildTCP数据stream,然后遵循HTTP协议。 HTTP请求的结尾在TCP字节stream中用两个<CRLF>标记。 任何其他检测HTTP请求结束的方法都会中断。
由于第一个数据包不包含HTTP请求结束序列,因此显然不能包含整个请求。
HTTP服务器必须遵循HTTP规范,或者它不是HTTP服务器。 HTTP规范只规定了TCP数据stream中的哪些字节。 它没有提到细分,这是很好的,因为实际应用中将无法控制。 它指定如何识别请求的结尾,不符合该规范的代码不是 HTTP服务器。 它实现了一个类似HTTP的协议,可能与HTTP兼容或不兼容。
有关POST的问题是如何进行的 – 是通过XMLHTTPRequest(即AJAX)进行分发的吗?
AJAX POSTs将标题和正文作为至less两个单独的TCP数据包发送。
在几年前的雅虎开发者networking上有一篇关于它的博客文章。