rt,个人的理解是减轻服务器压力,兼容http1.0,请问主要的原因是什么
HTTP是应用层的协议,浏览器和服务器是通过TCP建立连接的,我们知道建立TCP连接需要经过三次握手,这个过程是需要花费时间的。举个例子,我们访问某个链接如www.xxx.com/index
,该链接共请求10个图片资源,那么浏览器就得和服务器建立10个TCP连接,如果每次握手花费100ms,不考虑内容的传输和传播时间,光建立连接就花费了1000ms。
浏览器都有请求的并发限制,来上面的例子来说,如果浏览器的并发数是5,那么浏览器和服务器最多同时建立5个连接,剩下的请求等处于等待中,无形中又增加了响应时间。
Web服务器只有一份,而浏览器可以有多个,如果10个用户同时访问上面的链`www.xxx.com/index`,那么Web服务器就得维护100个TCP连接,无疑增加了服务器的负担。
一般来说HTTP采用的是长连接(持续性连接)
因为大部分http请求是突发性,一般是请求一个链接,然后看半天,然后再点击下一个链接,这种场景特别适合短连接
在http1.1之后,已经默认不是短链接了。如果request里的Connection设置成keep-alive,链接是不会断开的。
HTTP
设计之初就确立了其无状态这一特征,而符合这一特征的其实就是所谓的短链接
,只是常用的传输层协议中只有UDP
和TCP
两个选项,UDP
虽然无须握手,但其单条信息数据量有限,没有准确回馈等都不适合HTTP
,所以HTTP
只能选择TCP
这种协议。而后面所谓的长连接
只是在HTTP
的框架下优化TCP
链接的结果,其本身并不算是HTTP
的原则,换而言之,如果存在一种UDP
和TCP
之间的更符合HTTP
的传输层协议,那HTTP
也会选择那种协议,即使那种协议是即连即断的。
HTTP1.1默认支持长连接,nginx apache都有配置项
这个是的请求头,就是使用的长连接