Http的持久连接和管线化
【要点】
1. 什么是持久连接?
2. 什么是管线化?
【总结】
1.什么是持久连接? (keep alive模式)
http1.1规定了默认保持长连接(http persistent connection ,也有翻译为持久连接);数据传输完成了保持tcp连接不断开(不发rst包、不四次握手),等待在同域名下继续用这个通道传输数据;相反的就是短连接。
http 1.1版本支持持久连接 1.0版本不支持
与非持久连接的区别:
持久连接使客户端到服务器端连接持续有效,避免了重新建立连接
大大减少了连接的建立以及关闭时延。http连接是建立在tcp协议之上的,建立一条tcp连接需要三次握手,tcp连接关闭时需要四次挥手。这些都是需要时间的
2.什么是管线化
管线化机制须通过永久连接(persistent connection)完成,仅http/1.1支持此技术(http/1.0不支持)
在使用持久连接的情况下,某个连接消息的传递类似于
请求1 -> 响应1 -> 请求2 -> 响应2
管线化:某个连接上的消息变成了类似这样
请求1 -> 请求2 -> 请求3 -> 响应1 -> 响应2 -> 响应3
【注】
1. 那么持久连接和管线化的区别在于:
持久连接的一个缺点是请求和响应式是顺序执行的,只有在请求1的响应收到之后,才会发送请求2,而管线化不需要等待上一次请求得到响应就可以进行下一次请求。实现并行发送请求。
2. 只有get和head要求可以进行管线化,而post则有所限制
3. 初次创建连接时也不应启动管线机制,因为对方(服务器)不一定支持http/1.1版本的协议。
4.http1.1要求服务器端支持管线化,但并不要求服务器端也对响应进行管线化处理,只是要求对于管线化的请求不失败,而且现在很多服务器端和代理程序对管线化的支持并不好,现代浏览器chrome和firefox默认并未开启管线化支持。