什么是持久化连接
所谓持久化连接(长连接),就是当 http 建立了连接通信后,TCP 连接不断开,下次请求可以直接使用,无需再创建 TCP 连接。
持久接的特点是,只要任意一端没有明确提出断开连接,则保持 TCP 连接状态。
为什么要用长连接
发出请求时需要创建 TCP 连接,但是创建 TCP 连接需要三次握手;
因为页面上只有一两个请求的页面很少,如果每个请求都创建自己的 TCP 连接,每个都要重复的建立和断开,这非常的浪费服务端资源,并且请求响应时间也相对较长。
在这种情况下,长连接就应运而生了。
HTTP/1.1 中默认都是长连接,TCP 连接创建后,后面的请求都会使用已创建的 TCP 连接。从而减轻服务端的负载,提高响应时间,加快页面显示速度。
###管线化
所谓管线化,就是不用等待响应可直接发送下一个请求。
持久连接使得多数请求以管线化( pipelining)方式发送成为可能。从前发送请求后需等待并收到响应, 才能发送下一个请求。管线化技术出现后,不用等待响应可直接发送下一个请求。
这样就能够做到同时并行发送多个请求, 而不需要一个接一个地等待响应了。
- 管线化机制通过持久化连接完成,仅 HTTP/1.1 支持此技术
- 只有 GET 和 HEAD 请求可以进行管线化,而 POST 则有所限制
- 初次建立连接时不应启动管线化机制,因为对方(服务器)不一定支持 HTTP/1.1 版本
- 管线化不会影响响应到来的顺序,响应的返回顺序并未发生改变
- HTTP/1.1 要求服务器端支持管线化,但并不要求服务器端也对响应进行管线化处理,只是要求管线化的请求不失败即可。
- 由于上面提到的服务端问题,开启管线化很可能并不会带来大幅度的性能提升,而且很多服务器端和代理程序对管线化的支持并不友好,因此现代浏览器如 Chrome 和 Firefox 默认并未开启管线化支持。