关于 Wireshark 和 http/tcp 流

About Wireshark and http/tcp stream

谁能告诉我为什么在发送请求之前收到 HTTP 200 响应?太奇怪了。

一种可能是您的捕获丢失了一个数据包 - 例如,因为出于某种原因,捕获跟踪的程序没有碰巧捕获该数据包。

帧 747 是来自会话发起者(HTTP 客户端,即浏览器或...)的数据包,它是请求的一部分(大概是请求,因为它来自连接的发起者)不适合单个 link 层数据包。

Wireshark 将它报告为 "TCP segment of a reassembled PDU" 因为它没有找到 所有 包含请求的数据包,并且无法重新组装它(是的,那不是最好的措辞,因为 PDU 没有 重新组装;我不确定更好的措辞是什么...)。

Wireshark ,在某些情况下,通过注意 TCP 序列号 space 中的 "holes" 来检测 "missing" TCP 段。您捕获的第 746、747 和 750 帧的 TCP 序列号、段长度和 "next sequence number" 值是多少?

实际上 GET 请求是在数据包 #747 中发送的。您可以从以下事实中看出这一点:

  • 数据包的大小(628 字节)- 足以发送 GET
  • 已从服务器收到响应。

此请求没有 body,但有 Content-Type header。我猜是因为 header Wireshark 认为它会是一个 body 并试图等到数据包 #776。我已经检查了类似的情况,但没有 Content-Type header 并且 Wireshark 在正确的位置显示请求。

RFC 说 "The presence of a message-body in a request is signaled by the inclusion of a Content-Length or Transfer-Encoding header field in the request's message-headers." 所以不应该有 body。但据我所知,Wireshark 甚至可以使用非标准或 well-implemented 协议变体。所以我认为这不是一个错误。