發表文章

目前顯示的是 2024的文章

透過 curl 的 timeout 設定識別 http 的網路連線壅塞問題

網路連線壅塞是一個難解的問題, 因為網路會產生抖動(Jitter)現象, 抖動發生時, 連線會突然變得很慢. 當狀況改善後就會回復. 但很大的原因是因為是因為 DNS 解析或是 TCP 交握的過程產生的問題.  當 curl 連線到一個 HTTP 網址時,其工作流程包括以下幾個主要步驟: 1. DNS 查詢 目標 :解析主機名 (如 example.com ) 對應的 IP 位址。 過程 : curl 通過 DNS 伺服器進行查詢,獲取目標伺服器的 IP 地址。 結果 :若查詢成功,返回 IP 地址, curl 將繼續下一步。若查詢失敗, curl 則返回 DNS 錯誤並中止。 2. TCP 三向交握 (Three-Way Handshake) 目標 :建立與目標伺服器的 TCP 連線。 過程 : curl 通過系統內核發送一個 SYN 封包,目標伺服器回應 SYN-ACK ,然後 curl 返回 ACK 完成三向交握,建立起 TCP 連線。 結果 :若在 --connect-timeout 設定時間內未完成三向交握,則連線失敗並返回超時錯誤。 3. 發送 HTTP 請求 目標 :向伺服器發送具體的 HTTP 請求,根據 URL 設定不同的請求方法(如 GET 、 POST )。 過程 : curl 構建 HTTP 請求標頭並附加任何所需的數據(如表單數據),然後通過已建立的 TCP 連線將請求發送到伺服器。 結果 :伺服器接收請求並準備回應,若過程中出現網路問題,則請求可能中止或失敗。 4. 伺服器處理請求並返回回應 目標 :伺服器根據請求的 URL 路徑處理並生成對應的回應內容。 過程 :伺服器確認請求內容後,由 HTTP 伺服器(如 httpd )根據需求(例如讀取靜態文件或調用後端服務)生成回應,並加上適當的 HTTP 狀態碼和標頭。 結果 :伺服器將回應內容傳回給 curl 客戶端。 5. 接收 HTTP 回應 目標 : curl 從伺服器接收回應數據,並在終端或指定的輸出目標中顯示。 過程 : curl 讀取 HTTP 回應標頭(包括狀態碼,如 200 OK 、 404 Not Found 等)及內容,並根據需要顯示、保存或處理該回應。 結果 :若指定了輸出文件, curl 將回應寫入文件;若未指定,則在終端中顯示。...