HTTP連接管理——短連接,長連接,HTTP 流水線

連接管理是一個 HTTP 的關鍵話題:打開和保持連接在很大程度上影響著網站和 Web 應用程序的性能。在 HTTP/1.x 里有多種模型:短連接、_長連接_和 HTTP 流水線。
在這里插入圖片描述
下面分別來詳細解釋

短連接

HTTP 協議最初(0.9/1.0)是個非常簡單的協議,通信過程也采用了簡單的 “請求 - 應答” 方式。
它底層的數據傳輸基于 TCP/IP,每次發送請求前需要先與服務器建立連接,收到響應報文后會立即關閉連接。
因為客戶端與服務器的整個連接過程很短暫,不會與服務器保持長時間的連接狀態,所以就被稱為 “短連接”(short-lived connections)。早期的 HTTP 協議也被稱為是 “無連接” 的協議。

這是 HTTP/1.0 的默認模型(如果沒有指定 Connection 協議頭,或者是值被設置為 close)。而在 HTTP/1.1 中,只有當 Connection 被設置為 close 時才會用到這個模型。

問題

在 TCP 協議里,建立連接和關閉連接都是非常 “昂貴” 的操作。TCP 建立連接要有“三次握手”,發送 3 個數據包,需要 1 個 RTT;關閉連接是“四次揮手”,4 個數據包需要 2 個 RTT。
而 HTTP 的一次簡單 “請求 - 響應” 通常只需要 4 個包,如果不算服務器內部的處理時間,最多是 2 個 RTT。這么算下來,浪費的時間就是“3÷5=60%”,有三分之二的時間被浪費掉了,傳輸效率低得驚人。

長連接

針對短連接暴露出的缺點,HTTP 協議就提出了 “長連接” 的通信方式,也叫 “持久連接”(persistent connections)、“連接保活”(keep alive)、“連接復用”(connection reuse)
把 TCP 的連接和關閉時間成本由原來的一個 “請求 - 應答” 均攤到多個 “請求 - 應答” 上。
這樣雖然不能改善 TCP 的連接效率,但基于 “分母效應”,每個 “請求 - 應答” 的無效時間就會降低不少,整體傳輸效率也就提高了。
短連接與長連接的對比示意圖。

缺點

就算是在空閑狀態,它還是會消耗服務器資源,而且在重負載時,還有可能遭受 DoS 攻擊。這種場景下,可以使用非長連接,即盡快關閉那些空閑的連接,也能對性能有所提升。

HTTP/1.0 里默認并不使用長連接。把 Connection 設置成 close 以外的其他參數都可以讓其保持長連接,通常會設置為 retry-after。
在 HTTP/1.1 里,默認就是長連接的,不再需要標頭(但我們還是會把它加上,萬一某個時候因為某種原因要退回到 HTTP/1.0 呢)。

HTTP 流水線

默認情況下,HTTP 請求是按順序發出的。下一個請求只有在當前請求收到響應過后才會被發出。由于會受到網絡延遲和帶寬的限制,在下一個請求被發送到服務器之前,可能需要等待很長時間。
流水線是在同一條長連接上發出連續的請求,而不用等待應答返回。這樣可以避免連接延遲。理論上講,性能還會因為兩個 HTTP 請求有可能被打包到一個 TCP 消息包中而得到提升。就算 HTTP 請求不斷的繼續,尺寸會增加,但設置 TCP 的最大分段大小(MSS)選項,仍然足夠包含一系列簡單的請求。

并不是所有類型的 HTTP 請求都能用到流水線:只有冪等方式,比如 GET、HEAD、PUT 和 DELETE 能夠被安全地重試。如果有故障發生時,流水線的內容要能被輕易的重試。
今天,所有遵循 HTTP/1.1 標準的代理和服務器都應該支持流水線,雖然實際情況中還是有很多限制:一個很重要的原因是,目前沒有現代瀏覽器默認啟用這個特性。

缺點

● 正確的實現流水線是復雜的:傳輸中的資源大小、多少有效的 RTT 會被用到以及有效帶寬都會直接影響到流水線提供的改善。不知道這些的話,重要的消息可能被延遲到不重要的消息后面。這個重要性的概念甚至會演變為影響到頁面布局!因此 HTTP 流水線在大多數情況下帶來的改善并不明顯。
流水線受制于隊頭阻塞(HOL)問題

由于這些原因,流水線已被 HTTP/2 中更好的算法——==多路復用(multiplexing)==所取代。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/908167.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/908167.shtml
英文地址,請注明出處:http://en.pswp.cn/news/908167.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MySQL范式和反范式

范式 是用一組規則定義的數據庫設計標準,旨在確保數據庫結構合理,避免數據冗余和異常。 目的 消除數據的重復,提高存儲效率防止數據異常(插入、刪除、更新異常)提高數據的完整性和一致性 第一范式 定義 所有列&am…

編程技能:格式化打印04,sprintf

專欄導航 本節文章分別屬于《Win32 學習筆記》和《MFC 學習筆記》兩個專欄,故劃分為兩個專欄導航。讀者可以自行選擇前往哪個專欄。 (一)WIn32 專欄導航 上一篇:編程技能:格式化打印03,printf 回到目錄…

JavaScript性能優化實戰:深入探討JavaScript性能瓶頸與優化技巧

引言:為什么JavaScript性能至關重要 在現代Web開發中,JavaScript已成為構建交互式應用程序的核心技術。隨著單頁應用(SPA)和復雜前端架構的普及,JavaScript代碼的性能直接影響用戶體驗、轉化率甚至搜索引擎排名。研究表明,頁面加載時間每增加1秒,轉化率可能下降7%,而性能…

Java數據結構——八大排序

排序 插?排序希爾排序直接選擇排序堆排序冒泡排序快速排序歸并排序計數排序 排序的概念 排序:就是將一串東西,按照要求進行排序,按照遞增或遞減排序起來 穩定性:就是比如排序中有兩個相同的數,如果排序后&#xff0c…

WPF響應式UI的基礎:INotifyPropertyChanged

INotifyPropertyChanged 1 實現基礎接口2 CallerMemberName優化3 數據更新觸發策略4 高級應用技巧4.1 表達式樹優化4.2 性能優化模式4.3 跨平臺兼容實現 5 常見錯誤排查 在WPF的MVVM架構中, INotifyPropertyChanged是實現數據驅動界面的核心機制。本章將深入解析屬…

低空城市場景下的多無人機任務規劃與動態協調!CoordField:無人機任務分配的智能協調場

作者:Tengchao Zhang 1 ^{1} 1 , Yonglin Tian 2 ^{2} 2 , Fei Lin 1 ^{1} 1, Jun Huang 1 ^{1} 1, Patrik P. Sli 3 ^{3} 3, Rui Qin 2 , 4 ^{2,4} 2,4, and Fei-Yue Wang 5 , 1 ^{5,1} 5,1單位: 1 ^{1} 1澳門科技大學創新工程學院工程科學系&#xff0…

解決Java項目NoProviderFoundException報錯

前言 在Java開發中,jakarta.validation.NoProviderFoundException 是一個令人困惑的運行時錯誤,常因校驗框架依賴缺失或版本沖突導致。 問題復現:用戶注冊校驗失敗 業務場景 開發一個用戶注冊功能,要求: 校驗郵箱…

重構跨境收益互換價值鏈:新一代TRS平臺的破局之道

當香港券商面對內地洶涌的結構化產品需求,一套智能化的TRS系統正成為打開萬億市場的金鑰匙 在跨境金融的暗流涌動中,一家中資背景的香港券商正面臨甜蜜的煩惱:內地高凈值客戶對港股、美股的杠桿交易需求激增,但傳統TRS業務深陷操作…

實驗設計如何拯救我的 CEI VSR 28G 設計

為了確定總體設計裕量,CEI 28G VSR/100 Gb 以太網設計需要分析 500 萬種通道變化、收發器工藝和均衡設置的組合。蠻力模擬需要 278 天,這顯然超出了可用的時間表。 相反,我們使用實驗設計 (DOE) 和響應面建模 &#x…

【仿生機器人】刀劍神域——愛麗絲蘇醒計劃,需求文檔

仿生機器人"愛麗絲"系統架構設計需求文檔 一、硬件基礎 已完成頭部和頸部硬件搭建 25個舵機驅動表情系統 頸部旋轉功能 眼部攝像頭(視覺輸入) 麥克風陣列(聽覺輸入) 頸部發聲裝置(語音輸出&#xff09…

【Day44】

DAY 44 預訓練模型 知識點回顧: 預訓練的概念常見的分類預訓練模型圖像預訓練模型的發展史預訓練的策略預訓練代碼實戰:resnet18 作業: 嘗試在cifar10對比如下其他的預訓練模型,觀察差異,盡可能和他人選擇的不同嘗試通…

python打卡訓練營打卡記錄day44

知識點回顧: 預訓練的概念常見的分類預訓練模型圖像預訓練模型的發展史預訓練的策略預訓練代碼實戰:resnet18 作業: 嘗試在cifar10對比如下其他的預訓練模型,觀察差異,盡可能和他人選擇的不同嘗試通過ctrl進入resnet的…

Vue跨層級通信

下面,我們來系統的梳理關于 Vue跨層級通信 的基本知識點: 一、跨層級通信核心概念 1.1 什么是跨層級通信 跨層級通信是指在組件樹中,祖先組件與后代組件(非直接父子關系)之間的數據傳遞和交互方式。這種通信模式避免了通過中間組件層層傳遞 props 的繁瑣過程。 1.2 適用…

webPack基本使用步驟

webPack基本使用步驟 關于webPackwebPack配置的幾個概念entry(入口)output(輸出)loader(輸出)plugin(插件)mode(模式) 基本使用過程示例1.創建測試目錄和代碼…

龍虎榜——20250604

上證指數縮量收陽線,量能依然在5天線上,股價也在5天線上。 深證指數放量收陽線,量能站上5天均線,但仍受中期60天均線壓制。 2025年6月4日龍虎榜行業方向分析 1. 黃金 代表標的:曼卡龍、菜百股份。 驅動邏輯&#…

Viggle:開啟視頻人物替換新紀元

Viggle 的出現,為視頻人物替換帶來了前所未有的變革,為創作者和愛好者們打開了一扇通往無限可能的大門。 一、Viggle 技術原理剖析 Viggle 是一款基于先進人工智能技術的創新平臺,其核心在于能夠精準實現靜態圖片與動態視頻的融合轉化。它…

【BUG解決】關于BigDecimal與0的比較問題

這是一個很細小的知識點,但是很容易被忽略掉,導致系統問題,因此記錄下來 問題背景 明明邏輯上看a和b都不為0才會調用除法,但是系統會報錯:java.lang.ArithmeticException異常: if (!a.equals(BigDecimal…

千年之后再出發,銅官窯駛入微短劇的數字航道

過去一年里,微短劇已經成為走向全民關注、平臺扶持、政策引導的“內容新主流”。從市值百億的爆款平臺到走出國門的“短劇出海”,微短劇正在重塑中國數字文化的表達方式與產業結構,也成為各地競相爭奪的“新藍海”。 就在這樣的背景下&#…

數據庫管理-第333期 Oracle 23ai:RAC打補丁完全不用停機(20250604)

數據庫管理333期 2025-06-04 數據庫管理-第333期 Oracle 23ai:RAC打補丁完全不用停機(20250604)1 概念2 要求3 操作流程4 轉移失敗處理總結 數據庫管理-第333期 Oracle 23ai:RAC打補丁完全不用停機(20250604&#xff0…

Trae CN IDE自動生成注釋功能測試與效率提升全解析

Trae CN IDE 的自動注釋功能可以通過 AI 驅動的代碼分析生成自然語言注釋,以下是具體測試方法和優勢總結: 一、Python 代碼注釋生成測試 1. 測試環境 IDE:Trae CN IDE(需確認支持 Python)代碼示例: def …