错误顺序的HTTP请求的TCP段

我的Web服务服务器有时不会收到正确的HTTP请求,并返回“500 – 内部服务器错误”。 在服务器上使用tcpdump和Wireshark,我发现HTTP请求被分成2个TCP数据包,有时服务器会在第二个数据包到达之前尝试处理请求。

这Wirehark捕获已被采取在服务器端。

所以我看到的是:

  • HTTP请求的第一个片段在54.65954.659
  • 它再次收到71.168
  • 请求的第二个(也是最后一个)片段在99.869 (即第一个45秒之后)
  • 四毫秒之前,在99.865 ,服务器类超时,并试图处理一个不完整的请求(这给了一个500错误)

我不知道现在在哪里看。 我会说,这是一个networking问题,但我有几个TCPstream,服务器试图处理请求几毫秒之前,它是完全接收。 另一方面,需要45秒以上的TCP paquets意味着networking非常糟糕。

你有什么关于如何调查更多的指针?

我不知道现在在哪里看

无处。 认真。

发生。

帽子是第一个45秒后

这是胡格。 认真。 欧洲到美国的互联网延迟大约是150ms。 你是那么多的30倍​​ – 这是一个没有重发的下降。 可悲的是,除非你控制双方(!)你不能控制客户的行为。 像这样的东西发生。

如果这是你的局域网 – 这是非常糟糕的。 这就是互联网,就是这样。 主要的问题是它有多糟糕 – 如果是“数以千计的某些连接”,则可能是另一端严重的networking问题。 如果这种情况发生在几乎每个人身上,那么它就更接近你(连接,数据中心等)。 例如,昨天我们遇到了这样的情况 – 一些愚蠢的DDOS是我的一个链接。 严重的拥塞可能导致数据包几乎不可能通过。 但是,如果那不是你,那你什么都做不了。

这就像是有人迟到会议,告诉你他有严重的交通堵塞。 除非果酱在你的街上,否则你不知道。 互联网有时候可能会很糟糕。

转播可能是线索。 客户端没有收到服务器为该数据包发送的ACK。 在转储开始时,服务器也从同一个源端口获得了两个SYN。

那里的IP地址都是本地的,所以我猜这不是通过互联网。 你有访问客户端吗?

尝试在客户端和服务器上同时执行相同的数据包跟踪。 我希望你会看到什么是发送和接收到大的差异。

然后追踪电缆。 你有延迟和数据包丢失这么大,我会寻找一个气隙,当电压boost到足够高的电压跳过,或剥去一个生锈的连接和水滴上的Cat-5电缆。

更换networking部件(设备,端口和电缆),直到问题消失。

您是否尝试过指定您的响应的caching能力来禁止中间设备进行caching?

caching控制:无caching

要么

caching控制:私有

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9