HTTP 持久連線
在介紹持久連線之前,先簡單介紹一下瀏覽器與HTTP伺服器建立TCP連線的簡單過程(三次握手):
(1).客戶端向伺服器傳送一個小的冗餘訊息。
(2).伺服器向客戶端確認並響應以一個小的冗餘訊息。
(3).最後是客戶端向伺服器回確認。
往返時間(Round Trip Time,簡稱RTT)是分組從客戶主機遊動到伺服器主機再返回客戶主機所花的時間。
RTT包括分組傳播延遲、在中間路由器和交換機上的分組排隊延遲以及分組處理延遲。
前兩次握手結束所花費的時間是一個RTT,此時客戶端將HTTP請求資訊傳送到TCP連線中,客戶端同時將第三次握手確認捎帶在包含這個資訊的資料分節中傳送出去。最後,伺服器接收到請求資訊之後,會將響應內容傳送到TCP連線中,伺服器同時將早前收到的客戶請求的確認捎帶在包含該響應的資料分節中傳送出去。
圖示如下:
完成這麼一個互動,總體所花費的時間大約為2個RTT加上響應資料傳輸時間。
非持久連線和持久連線:
客戶端發出請求,伺服器端對每個請求進行響應。
對於這些請求|響應,如果每次都經過一個單獨的TCP連線,稱為非持久連線。反之,如果每次都經過相同的TCP連線進行傳送,稱為持久連線,也就是多個請求和響應可以利用同一個TCP連線,而不是每一次請求響應都要新建一個TCP連線。考慮到每次TCP(每開始一個TCP連線都是慢啟動)連線的高消耗,永續性連線好處不言而喻。
HTTP1.1協議預設開啟持久連結,截圖如下:
當然持久連線不會無限期的保持,通常,HTTP伺服器在某個連線閒置一段特定時間後關閉它,而這段時間通常是可以配置的。下面是永續性連線和非持久連線對比圖示:
上面圖示很好地展示了兩者的區別,效能的差別也就得以體現。
相關文章
- Http持久連線與HttpClient連線池HTTPclient
- Socket連線和Http連線HTTP
- HTTP連線池HTTP
- HTTP長連線HTTP
- LVS(五)LVS的持久連線
- http的長連線和短連線HTTP
- HTTP非持續連線和持續連線HTTP
- 圖解 HTTP 連線管理圖解HTTP
- HTTP長連線、短連線究竟是什麼?HTTP
- 一文讀透HTTP的長連線和短連線HTTP
- HTTP代理的兩種連線方式HTTP
- 最近學習了Http連線池HTTP
- http連線複用進化論HTTP
- WebSocket 是什麼原理?為什麼可以實現持久連線?Web
- php curl 連線 EMQ http_api的請求PHPMQHTTPAPI
- HTTP客戶端連線,選擇HttpClient還是OkHttp?HTTP客戶端client
- Feign,HTTP連線超時問題SocketTimeoutException: Read timed outHTTPException
- 可持久化線段樹持久化
- WebSocket 是什麼原理?為什麼可以實現持久連線?有點懵!!!Web
- 內連線、左連線、右連線
- 併發、多執行緒、HTTP連線數有何關係?執行緒HTTP
- MYSQL語法:左連線、右連線、內連線、全外連線MySql
- netty系列之:搭建客戶端使用http1.1的方式連線http2伺服器Netty客戶端HTTP伺服器
- Go HTTP 重用底層 TCP 連線需要注意的關鍵點GoHTTPTCP
- 長連線及在Node中的應用——HTTP/1.1 keep-aliveHTTPKeep-Alive
- 長連線和短連線
- MySQL筆記3——內連線/外連線、多表連線MySql筆記
- mysql INNER JOIN、LEFT JOIN、RIGHT JOIN;內連線(等值連線)、左連線、右連線MySql
- Python自動化測試Selenium+chrome連線HTTP代理全攻略PythonChromeHTTP
- VNC連線,VNC如何連線WindowsVNCWindows
- sql 內連線和外連線SQL
- 012 通過連結串列學習Rust之持久化單連結串列Rust持久化
- 012 透過連結串列學習Rust之持久化單連結串列Rust持久化
- 長連線和短連線的使用
- 連線池和連線數詳解
- Oracle左外連線、右外連線、完全外連線以及(+)號用法Oracle
- 「學習筆記」可持久化線段樹筆記持久化
- 014 通過連結串列學習Rust之持久化連結串列的DropRust持久化