HTTP長連線和管線原理是什麼?什麼是隊頭阻塞?

一、面試官:請說說看HTTP1.1與HTTP1.0的主要差異是什麼?
1. 連接管理:長連接與管線處理
HTTP/1.0:預設使用短連接,每次請求需建立新TCP連接,請求完成後立即關閉。若需長連接,需明確設定 Connection: Keep-Alive,但相容性差(部分代理不支援)。

HTTP/1.1:預設啟用長連線(持久連線),允許在一個TCP連線上傳輸多個請求/回應,減少握手開銷。支援管線(Pipelining)技術,客戶端可連續發送多個請求(無需等待回應),但伺服器需依請求順序回傳回應,避免隊頭阻塞。


2. Host頭域支援虛擬主機
HTTP/1.0:假設一個IP對應唯一伺服器,請求頭中無Host字段,無法支援虛擬主機技術(如多個網域共享相同IP)。

HTTP/1.1:強制要求請求頭包含 Host 字段,用於標識目標伺服器網域名稱。若缺失,伺服器傳回 400 Bad Request,解決了虛擬主機場景下的資源定位問題。

3. 快取機制增強
HTTP/1.0:依賴 Expires(絕對時間)和 Last-Modified(最後修改時間)控制緩存,存在時脈同步問題。快取驗證透過 If-Modified-Since 實現。

HTTP/1.1:

引入 Cache-Control 頭(如 max-age、no-cache),支援相對時間快取策略。
新增 ETag(實體標籤)機制,透過 If-None-Match 驗證資源是否變更。
支援 Vary 頭,根據請求頭(如 Accept-Language)區分不同快取版本。
4. 頻寬最佳化與分塊傳輸
範圍請求:HTTP/1.1 支援 Range 頭,允許請求資源部分內容(如斷點續傳),回應狀態碼為 206 Partial Content。

分塊傳輸編碼(Chunked Encoding):動態產生內容時,透過 Transfer-Encoding: chunked 分塊傳輸,無需預知完整資料大小,提升傳輸效率。

100 Continue 狀態碼:客戶端發送大請求前,先透過 Expect: 100-continue 頭詢問伺服器是否接受,避免頻寬浪費。

5. 錯誤狀態碼與內容協商
錯誤狀態碼:HTTP/1.1 新增24個狀態碼,如

100 Continue:(繼續請求)
206 Partial Content:(部分內容)
409 Conflict:(資源狀態衝突)
410 Gone:(資源永久刪除)。
內容協商:透過 Accept-* 系列頭(如 Accept-Language、Accept-Encoding)支援多語言/壓縮格式,伺服器傳回最適配版本,並透過 Vary 頭記錄協商依據。

6. 其他改進
請求方法擴充:HTTP/1.1 新增 OPTIONS、PUT、DELETE、TRACE 等方法,支援 RESTful API 設計。

訊息傳遞優化:支援 Trailer 頭傳遞分塊傳輸後的元資料(如校驗和),提升大檔案傳輸的完整性。

總結對比表: