如何调试“HTTP 请求已发送,等待响应”?

如何调试“HTTP 请求已发送,等待响应”?

我有一台使用 ADSL 连接的 Linux 服务器,我刚刚注意到有时我会

Connecting to example.com|xxx.xxx.xxx.122|:80... connected.
HTTP request sent, awaiting response...

当我使用wget或例如像 Firefox 这样的浏览器时。

在按下 CTRL-C 然后重试的情况下wget“解决问题”,而在 Firefox 的情况下,重新加载页面也会使页面加载。

这种情况似乎是随机发生的。我尝试将 DNS 更改为 Google 的 DNS,但仍然遇到同样的问题。

问题

我该如何调试类似的东西,以便找到问题的根源或者模式?

答案1

您是否曾尝试过等待查看返回的 HTTP 状态代码?

为了调试这种情况,请打开 2 个终端:第一个终端,通过 ssh 连接到您的服务器并输入:

# tcpdump -vv -s0 tcp port 80 -w /tmp/example.pcap

(您也可以附加and src host <client_IP>以过滤垃圾请求)

在第二个终端中,使用wget浏览您的网站,重现此问题并切换到第一个终端并按Ctrl+ C

将此.pcap文件复制到客户端并用 Wireshark 打开,看看会发生什么。

答案2

如果你看到:

HTTP request sent, awaiting response...

这意味着 DNS 工作正常,TCP 连接处于建立状态并且请求已发送。我认为导致您遇到问题的原因是远程服务器可能很忙。

正如 @quanta 所说,网络捕获将为您提供更好的详细信息。在 Wireshark 中,只需使用“跟踪 TCP 流”即可查看 HTTP 对话。还要注意 ICMP 消息。

答案3

重新启动 Apache 服务器。这应该可以解决问题。

答案4

我遇到了非常类似的问题新配置AWS 实例:

apt install会失败,声称无法获取某些包。当我尝试使用 手动获取包时wget,它有时会无限期挂起,有时会立即成功(在它无限期挂起之后)。

重启服务器没有帮助。然后我终止并重新配置了实例,之后新实例上就没再出现问题了。

去搞清楚。

相关内容