长连接与短链接问题的探讨

通常我们会提及HTTP的长连接和短连接,因为HTTP本身是一个请求-响应的无状态协议。所以就它自身来说是无法实现长连接的。

HTTP长连接的本质是TCP传输层的长连接。

如图
长连接与短链接问题的探讨
图片来自http://www.nowamagic.net/academy/detail/23350305

它表明了一个大致的过程,左边是短连接,TCP建立连接,客户端发起请求,并且收到服务器响应后,就会主动进行四次挥手结束TCP连接。

右边则是长连接,在一次HTTP请求-响应结束后,保持TCP连接的不断开,从而在下次请求时,直接复用上次建立的TCP连接。

HTTP协议中的Header的参数connection:keep-alive;
在HTTP1.0中默认的是短连接,而在HTTP1.1中默认采用长连接。

很多的博客中对比了长连接和短连接的优劣。

但是这里我要有个概念,短连接每个请求都会建立tcp请求,之后释放。
单单请求一个百度首页html,css,js,img就多达19个请求。短连接需要发起19次的TCP连接,而长连接只要一次。这还不算我们使用的电商网站,门户网站。

因为随着web端的发展,web可以做的事情越来越多,而早期简单的web只能提供简单的信息浏览,所以采用短连接是当时的考虑,后面由于交互的增加,各种页面的资源文件增多,HTTP1.1协议采用了长连接,也是正确的选择。

虽然,短连接节约服务器的资源(请求-响应后就释放),但是在每次建立TCP连接所产生的延迟,以及对带宽的压力也不能不考虑。

简单的说下短连接的优点:管理起来比较简单,存在的连接都是有用的连接,不需要额外的控制手段。

以上为长连接和短连接的区别,当别人问起你的时候可别再不清楚了