Linux
如何調試“已發送 HTTP 請求,等待響應”?
我有一個 ADSL 連接上的 Linux 伺服器,我只是注意到有時我得到
Connecting to example.com|xxx.xxx.xxx.122|:80... connected. HTTP request sent, awaiting response...
當我使用
wget
或例如像firefox這樣的瀏覽器時。在
wget
按CTRL-C再試的情況下“解決問題”,而在firefox的情況下,重新載入頁面也會使頁面載入。當它發生時,它似乎是隨機的。我嘗試將 DNS 更改為 Google 的 DNS,但我仍然遇到同樣的問題。
問題
如何調試類似的東西,以便找到問題的根源或模式?
你有沒有試過等待查看 HTTP 狀態碼返回什麼?
要調試這種情況,請打開 2 個終端:首先,通過 ssh 連接到您的伺服器並輸入:
# tcpdump -vv -s0 tcp port 80 -w /tmp/example.pcap
(您也可以附加
and src host <client_IP>
過濾垃圾請求)在第二個中,使用
wget
瀏覽您的網站,重現此問題並切換到第一個終端並按Ctrl
+C
。將此文件複製
.pcap
到客戶端並使用 Wireshark 打開以查看會發生什麼。
如果你看到:
HTTP request sent, awaiting response...
這意味著 DNS 工作正常,TCP 連接處於已建立狀態並且請求已發送。我認為您的問題的原因是遠端伺服器可能很忙。
正如@quanta 所說,網路擷取將為您提供更好的細節。在 Wireshark 中,只需使用 Follow TCP Stream 即可查看 HTTP 會話。也要注意 ICMP 消息。