什么是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管线化的浏览器;