什么是HTTP Pipeline
http管線化是一項實現了多個http請求但不需要等待響應就能夠寫進同一個socket的技術,僅有http1.1規范支持http管線化,1.0並不支持;
采用管線化的請求會對頁面載入時間產生動態的提高,尤其是當通過高延遲的網絡,例如通過衛星網絡連接;
普通情況下通過同一個tcp數據包發送多個http請求,而http管線化向網絡上發送更少的tcp數據包,大幅減輕網絡負載;
只有冪等的請求能夠被管線化,例如get和head請求;
post請求不應該被管線化;
新建立連接的請求因為無法判斷源服務器(代理服務器)是否支持http1.1協議,也不應該被管線化處理。所以,僅在重用已經成功建立的持久化連接的情況下,才可以使用管線化。
http管線化需要客戶端和服務器雙方都能夠支持,http1.1規定服務器必須支持管線化,但並未提及服務器必須管線化響應信息,但如果客戶端選擇管線化的通信方式,服務器必須能夠支持和受理。
HTTP Pipeline優勢
減少cpu和內存占用(因為同一時間,啟用更少的連接)
減輕網絡堵塞(建立更少的連接)
減輕后續請求的延遲(因為避免建立新連接而減頻繁的握手)
不采用管道化意味着每次請求必須被應答之后,它的連接才能空閑以便發送下一次請求;
不采用管道化會導致平均每個連接帶來額外的延遲,或者如果你的服務器不支持http長連接,進行其他的tcp三次握手增加了額外的請求往返,雙倍延遲;
不需要犧牲當前的tcp連接, 就能夠報告錯誤.
根據RFC 2616 (page 47),一個單用戶客戶端對於任何一台服務器或者代理服務器都可以維護不多於兩個的連接數.
在當前由n台服務器組成的網絡中, 任意一台代理服務器對另外的服務器或者代理服務器應該維護2*n個連接.
這些指南目的在於提升http響應性能,避免網絡堵塞.
什么是http長連接
http持久化連接也稱http長連接或者http連接復用,思想是使用同一個tcp連接去發送和接收多個http請求/響應,以便避免為每次單獨的請求/應答建立新的連接.
IE, Firefox, Safari ship瀏覽器默認狀態下並不激活http管線化的功能;
Opera是據作者所知唯一默認狀態下激活http管線化的瀏覽器;