Http流水线
HTTP 流水線
HTTP 流水線在現代瀏覽器中并不是默認被啟用的:
- Web 開發者并不能輕易的遇見和判斷那些搞怪的代理服務器的各種莫名其妙的行為。
- 正確的實現流水線是復雜的:傳輸中的資源大小,多少有效的?RTT?會被用到,還有有效帶寬,流水線帶來的改善有多大的影響范圍。不知道這些的話,重要的消息可能被延遲到不重要的消息后面。這個重要性的概念甚至會演變為影響到頁面布局!因此 HTTP 流水線在大多數情況下帶來的改善并不明顯。
- 流水線受制于?HOL?問題。
由于這些原因,流水線已經被更好的算法給代替,如?multiplexing,已經用在?HTTP/2。
默認情況下,HTTP?請求是按順序發出的。下一個請求只有在當前請求收到應答過后才會被發出。由于會受到網絡延遲和帶寬的限制,在下一個請求被發送到服務器之前,可能需要等待很長時間。
流水線是在同一條長連接上發出連續的請求,而不用等待應答返回。這樣可以避免連接延遲。理論上講,性能還會因為兩個 HTTP 請求有可能被打包到一個 TCP 消息包中而得到提升。就算 HTTP 請求不斷的繼續,尺寸會增加,但設置 TCP 的?MSS(Maximum Segment Size) 選項,仍然足夠包含一系列簡單的請求。
并不是所有類型的 HTTP 請求都能用到流水線:只有?idempotent?方式,比如?GET、HEAD、PUT?和?DELETE?能夠被安全的重試:如果有故障發生時,流水線的內容要能被輕易的重試。
今天,所有遵循 HTTP/1.1 的代理和服務器都應該支持流水線,雖然實際情況中還是有很多限制:一個很重要的原因是,目前沒有現代瀏覽器默認啟用這個特性
總結
- 上一篇: 阿里云centos6静默安装oracle
- 下一篇: Docker 搭建 Jenkins 流水