HTTP協定中的並發限制及隊首阻塞問題
串行連線
HTTP/0.9 和早期的 HTTP/1.0 協定對 HTTP 請求處理是串行化的。假如一個頁麵包含 3 個樣式文件,同屬於一個協定、網域名稱、連接埠。那麼,瀏覽器一共需要發起四次請求,並且每次只能打開一個 TCP 通道,在一個請求資源完成下載後,立刻斷開該連接,再開啟一個新的連接去處理隊列中的下一個請求。隨著頁面資源大小、數量的不斷擴增,網路延遲時間會不斷堆積,使用者會面對滿屏空白,等待過長時間而失去耐心。
並行連接
為了提高網路的吞吐能力,改進後的HTTP 協定允許客戶端同時開啟多個TCP 連接,並行地請求多個資源,充分利用頻寬。通常,每一個連線之間都會有一定延遲,但請求的傳輸時間是重疊的,整體延遲要比串列連線低很多。考慮到每一個連線都會消耗系統資源,且伺服器需要處理大量的使用者並發請求,瀏覽器會對並發請求數量做一定的限制。即使RFC 並沒有規定特定的限制數量,各瀏覽器廠商也會有自己的標準:
IE 7: 2
IE 8/9: 6
IE 10: 8
IE 11: 13
Firefox: 6
Chrome: 6
Safari: 6
Opera: 6
iOS WebView: 6
Android WebView: 6
持久連接(長連接)
早期的HTTP 協定對每個請求都佔用一個獨立的TCP 連接,這無疑增加了TCP 的建立連接開銷、擁塞控制開銷、釋放連線開銷,改進後的HTTP/1.0 和HTTP/1.1(預設)都支援了持久連線。如果一個請求完成後,不會立刻斷開連接,而是在一定的時間內保持連接,以便快速處理即將到來的 HTTP 請求,復用同一個 TCP 通道,直到客戶端心跳檢測失敗或伺服器連接逾時。這個特性可以透過 HTTP 首部 Connection: keep-alive 來激活,客戶端也可以傳送 Connection: close 來主動關閉連線。所以,我們看到,並行連接和持久連接這兩種優化是相輔相成的,並行連接使得首次加載頁面可以同時打開多個TCP 連接,而持久連接保證了後續的請求復用已打開的TCP 連接,這也是現代Web 頁面的普遍機制。
管道化連線
#持久連線讓我們可以重複使用連線來完成多次要求,但它必須滿足FIFO 的佇列順序,必須確保前一個請求成功到達伺服器、處理成功並且收到伺服器傳回的首個位元組,才可以發起佇列中下一個請求。 HTTP 管道允許客戶端在同一個 TCP 通道內連續發起多個請求,而不必等待回應,消除了往返延遲時間差。但現實情況由於 HTTP/1.x 協定的限制,不允許資料在一個鏈路上交錯到達(IO 多路復用)。設想一種情況,客戶端伺服器端同時發送一個HTML 和多個CSS 請求,伺服器並行處理所有請求,當所有的CSS 請求處理完成並加入到緩衝隊列,卻發現HTML 請求處理遇到問題而無限被掛起,嚴重時甚至造成緩衝區溢出,這種情況就叫做隊首阻塞。因此,這個方案在 HTTP/1.x 協定中並沒有被採納。
隊首阻塞並不是HTTP 中獨有的概念,而是在快取式通訊網路交換中的一種普遍現象
總結
#1、對於同一個協定、網域、端口,瀏覽器允許同時開啟個TCP 連接,一般上限為6 個。
2、同一個 TCP 連線允許發起多次 HTTP 請求,但必須等待前一個請求的首個位元組回應到達客戶端。
3、由於隊首阻塞問題,不允許客戶端同時發送佇列中所有請求,這個問題在 HTTP/2.0 得已解決。
以上是HTTP協定中的並發限制及隊首阻塞問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

深入解讀HTTP協定狀態碼:為什麼狀態碼對於網站開發至關重要隨著網路的快速發展,網站開發變得越來越重要。在網站開發中,HTTP協定扮演著至關重要的角色。它定義了瀏覽器和伺服器之間的通訊規範,透過請求和回應來傳輸資料。而HTTP狀態碼就是在這個過程中的一部分,用來表示請求的處理情況。本文將深入解讀HTTP協定狀態碼的作用與意義。 HTTP狀態碼是一個三位數的數

PHP是一種在網路上應用廣泛的程式語言,而HTTP協定是支撐網際網路的重要協定。對於初學者而言,學習HTTP協定是入門PHP程式設計的重要一步。本文將從HTTP協議的基本概念、請求方法、狀態碼和實際應用等方面介紹HTTP協議的具體內容,以幫助初學者更好地理解和掌握HTTP協議,從而更有效地開發PHP應用程式。 HTTP協定的基本概念HTTP協定是HyperText

HTTP協定是現代互聯網中最常用的應用層協定之一,它基於客戶端-伺服器模型,用於在客戶端和伺服器之間傳輸資料。 HTTP協定透過請求和回應的方式來進行通信,而訊息頭是HTTP協定中非常重要的一部分,它用於在請求和回應中傳遞元資料。本文將探討HTTP協定訊息頭的作用。首先,HTTP協定訊息標頭可以用來傳遞請求的相關資訊。當客戶端向伺服器發送請求時,訊息標頭中的字段

Nginx反向代理伺服器是一種功能強大的Web伺服器,它不僅可以處理HTTP請求和回應,還能提供HTTP協定支援和效能最佳化。在本文中,我們將詳細解讀Nginx反向代理伺服器的HTTP協定支援和效能最佳化,並提供一些程式碼範例。一、HTTP協定支援請求處理Nginx反向代理伺服器可以接收來自客戶端的HTTP請求,並將其轉送給後端伺服器。對於每個請求,Nginx會進

Workerman開發:如何實現基於HTTP協定的Web伺服器,需要具體程式碼範例引言:隨著網際網路的快速發展,Web開發變得越來越重要。而提供Web服務的基礎就是Web伺服器。 Workerman是高效能的PHP開發框架,不僅可用於開發網路通訊伺服器,還可實現基於HTTP協定的Web伺服器。本文將介紹利用Workerman開發一個簡單的HTTPWeb服

Workerman開發:如何實現基於HTTP協定的大量文件處理系統,需要具體程式碼範例隨著互聯網和數位化技術的發展,資料處理變得越來越重要,尤其在企業中。有時候,我們需要處理大量的文件,例如圖片、影片、音訊等等。這時候,如果手工操作,不僅費時費力,而且易出錯。如何實現批次文件處理系統就是本文要探討的議題。 Workerman是一個PHP開發的高效能的socket

PHP是一種廣泛使用的伺服器端腳本語言,用來建立Web應用程式。在Web應用程式中,HTTP協定和狀態碼是必需的基礎知識,在本文中我們將探討PHP中HTTP協定和狀態碼的基礎知識。 HTTP協議是用於傳輸超文本的協議,在Web開發中被廣泛使用。透過HTTP協議,網頁瀏覽器和網頁伺服器之間透過網際網路進行交互,網頁瀏覽器向網頁伺服器傳送HTTP請求,W

403狀態碼解析:如何應對HTTP協定中的禁止存取錯誤引言:在網路世界中,當我們瀏覽網頁或傳送請求時,常常會遇到各種各樣的錯誤。其中之一就是403狀態碼,表示禁止存取錯誤。本文將對403錯誤進行解析,並提供一些因應策略,幫助讀者更好地處理這類問題。一、403狀態碼的意義與原因403狀態碼是HTTP協定中的一個客戶端錯誤狀態碼,它表示伺服器瞭解客戶端的請求,但
