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