| 模式 | 流程 | 優點 | 缺點 |
|---|---|---|---|
| 連接復用 (Keep-Alive) | CONNECT → GET index.html → GET main.css → GET do.js → CLOSE | 減少 TCP 三次握手/四次揮手開銷,降低延遲,節省客戶端/代理端口資源 | 需處理管線化/隊頭阻塞,代理需維持連接狀態,超時管理複雜 |
| 逐請求新建連接 | CONNECT → GET index.html → CLOSE → CONNECT → GET main.css → CLOSE ... | 邏輯簡單,無狀態,天然隔離故障 | 高延遲,大量短連接消耗端口,易觸發 TIME_WAIT 耗盡 |
Connection: keep-alive,代理與目標服務器均支持時自動復用。
// .NET HttpClient 自動 Keep-Alive
var client = new HttpClient(); // 底層 HttpClientHandler 默認 Keep-Alive
var resp1 = await client.GetAsync("https://proxy/index.html");
var resp2 = await client.GetAsync("https://proxy/main.css"); // 復用同一連接
生產環境強烈推薦 Keep-Alive 模式(方案 1),配合連接池與超時控制。僅在調試、極簡代理或不支持持久連接的舊系統中使用方案 2。