一次網絡請求的處理流程
當用戶打開一個 Web 站點時,瀏覽器會發起一系列的網絡請求,以獲取站點的內容。這個過程涉及到多個環節,包括緩存、代理、DNS 解析、TCP 請求、SSL 請求、HTTP 請求等。本文將詳細介紹這些環節,并提供一些常見的問題排查方法。
一、網絡請求的處理流程
- HTTP 強制緩存
HTTP 強制緩存是瀏覽器在本地緩存中查找請求資源的過程。如果資源在緩存中存在且未過期,瀏覽器將直接使用緩存中的資源,而不會向服務器發送請求。這可以顯著提高頁面加載速度。
- ServiceWorker
ServiceWorker 是一種在瀏覽器后臺運行的腳本,可以攔截和處理網絡請求。如果 ServiceWorker 存在且已經注冊,它可以在請求到達服務器之前,直接從緩存中返回響應內容。這樣可以進一步提高頁面加載速度,甚至在離線情況下也能提供內容。
- 設備連接到互聯網
如果瀏覽器無法從緩存或 ServiceWorker 中獲取資源,它將嘗試連接到互聯網。這一步需要確保設備的網絡連接正常,否則請求將無法繼續。
- 網絡代理
在網絡請求過程中,用戶可能會使用代理工具(如梯子工具、網絡加速器等)。如果代理配置錯誤或連接異常,可能會導致請求失敗或響應緩慢。
- 查找 hosts
在進行 DNS 解析之前,瀏覽器會先檢查本地的 hosts 文件。如果 hosts 文件中存在對應的域名和 IP 地址映射,瀏覽器將直接使用該映射,而不會進行 DNS 解析。
- DNS 解析
如果 hosts 文件中沒有對應的映射,瀏覽器將進行 DNS 解析,以獲取域名對應的 IP 地址。DNS 解析的結果可能會影響請求的路由和響應速度。
- 初始化 TCP 請求
在獲取到 IP 地址后,瀏覽器將初始化 TCP 請求,建立與服務器的連接。這一步需要確保網絡環境穩定,否則可能會導致連接失敗。
- 初始化 SSL
如果請求使用 HTTPS 協議,瀏覽器將初始化 SSL 握手,以確保數據傳輸的安全性。這一步需要確保 SSL 證書有效,否則可能會導致請求失敗。
- 初始化 HTTP 請求
在建立連接后,瀏覽器將發送 HTTP 請求,包括請求頭和請求體。服務器接收到請求后,將返回相應的響應內容。
- 路由設備處理數據包
在數據傳輸過程中,路由設備會處理數據包,確保數據能夠正確到達目標服務器。如果路由設備不穩定,可能會導致數據包丟失或延遲。
- CDN 緩存
如果服務器使用了 CDN(內容分發網絡),請求可能會被路由到離用戶最近的 CDN 節點。CDN 緩存可以顯著提高響應速度,但如果緩存配置不當,可能會導致內容不一致。
- 服務端響應
最終,服務器將處理請求并返回響應內容。如果服務器端存在問題,可能會導致響應內容不正確或響應速度緩慢。

二、常見問題與排查步驟
1. 沒有返回內容
1.1 ServiceWorker 返回結果為空
-
排查方法:
- 使用 Chrome DevTools 檢查 HTTP 請求上下文,查看 ServiceWorker 是否正常工作。
1.2 HTTP 強制緩存的內容為空
-
排查方法:
- 使用 Chrome DevTools 檢查 HTTP 請求緩存應用狀態和響應頭,確保緩存配置正確。
1.3 代理配置錯誤、連接異常
-
排查方法:
-
檢查代理工具的配置,確保代理工具的使用場景正確。
-
常見情況包括:不該用代理工具的時候使用了代理工具,或者該用代理工具的時候沒有使用。
-
1.4 hosts 配置錯誤
-
排查方法:
-
使用 Chrome DevTools 檢查 HTTP 請求的 Remote Address,確保 hosts 文件中的映射正確。
-
使用
dig命令驗證 DNS 解析結果,例如: -
bash復制
dig 58.com dig @119.29.29.29 58.com dig AAAA @119.29.29.29 ipv6.58.com -
1.5 DNS 解析結果不正確
-
排查方法:
-
使用 Chrome DevTools 檢查 HTTP 請求的 Remote Address,確保 DNS 解析結果正確。
-
使用
dig命令驗證 DNS 解析結果,例如: -
bash復制
dig 58.com dig @119.29.29.29 58.com dig AAAA @119.29.29.29 ipv6.58.com -
1.6 TCP 層無法通信
-
排查方法:
-
使用 Chrome DevTools 檢查請求狀態,確保 TCP 連接正常。
-
使用
telnet命令測試連接,例如: -
bash復制
telnet 58.com 80 -
1.7 SSL 證書過期、與域名不符
-
排查方法:
- 使用 Chrome DevTools 檢查 Security 面板,確保 SSL 證書有效。
1.8 HTTP 請求、響應異常
-
排查方法:
- 使用 Chrome DevTools 檢查請求狀態碼、緩存狀態和必要的請求響應頭,確保請求和響應符合預期。
2.返回內容慢
2.1 沒有合理利用 HTTP 強制緩存
-
排查方法:
- 使用 Chrome DevTools 檢查 HTTP 請求緩存應用狀態和響應頭,確保緩存配置正確。
2.2 互聯網連接狀態異常
-
排查方法:
-
使用
ping命令驗證網絡基本連通性,例如: -
bash復制
ping -c 10 58.com-
確保網絡環境滿足以下條件:
-
丟包率低于 5%。
-
平均延時低于 20ms。
-
最低、最高延時差值小于 30ms。
-
-
2.3 代理配置錯誤、連接異常
-
排查方法:
- 檢查代理工具的配置,確保代理工具的使用場景正確。
2.4 DNS 解析結果異常
-
排查方法:
-
使用
dig命令驗證 DNS 解析結果,例如: -
bash復制
dig 58.com dig @119.29.29.29 58.com dig AAAA @119.29.29.29 ipv6.58.com -
2.5 路由設備不穩定
-
排查方法:
-
使用
traceroute命令驗證數據包到達公網之前的路由情況,例如: -
bash復制
traceroute -n 58.com- 檢查 WiFi 狀態,確保 Tx Rate 高于 150 Mbps,連接方式為 5Ghz。
-
2.6 沒有啟用 HTTP/2
-
排查方法:
- 使用 Chrome DevTools 檢查 Network 面板中的 Protocol,確保使用了 HTTP/2。
2.7 實時性需求較高的場景使用了 TCP
-
排查方法:
- 考慮使用 UDP 協議,以提高實時性。
2.8 沒正確使用 CDN 緩存
-
排查方法:
- 使用 Chrome DevTools 檢查請求的參數,確保 CDN 緩存配置正確。
3. 返回內容不對
返回內容不對通常是服務端或 HTTP 網關服務的問題,需要聯系后端或運維來解決。
4. 通信內容被監控、劫持、篡改
4.1 DNS 解析記錄監控、劫持、篡改
-
防御方法:
-
在 Chrome 中配置使用可靠的 DoT(DNS over TLS)或 DoH(DNS over HTTPS),例如:
-
打開
chrome://settings/security。 -
選擇
Use secure DNS。 -
選擇
With custom,國內建議填寫https://doh.pub/dns-query。
-
-
在路由器中使用支持 DoT/DoH 且支持 EDNS Client Subnet 的方式,與上游 DNS 通信。
-
在域名提供商處配置 DNSSEC。
-
4.2 中間人攻擊(MITM)
-
防御方法:
-
使用 SSL 的站點不一定是安全的,但不使用或沒有正確使用 SSL 的站點一定是不安全的。
-
通過客戶端鎖定站點證書的方式,是最安全的方法。
-
三、總結
網絡請求的處理流程涉及多個環節,每個環節都可能影響請求的成功與否。通過合理的配置和排查方法,可以有效解決常見的網絡問題,提高用戶體驗。
浙公網安備 33010602011771號