http的连接管理
短连接
每次“请求-响应”都先建立TCP连接,完成后关闭连接。这种情况下三次握手需要1.5个RTT,“请求-响应”需要2个RTT(每个传输都需要ack),四次挥手需要2个RTT,效率很低。
长连接
建立TCP连接后不需要关闭,后续请求复用这个tcp连接。http/1.1默认开启长连接。
浏览器对每个域名限制最多可开启6个长连接,为了进一步提高并发连接数,就有了“域名分片”技术,即将原来的一个域名分成多个域名,但最后指向同一台服务器。
如果大量长连接空闲不使用,就会浪费资源,很快耗尽服务器资源。这就需要设置连接超时时间或者最大请求数,满足条件后就断开连接。
长连接在请求头里的字段是:Connection:keep-alive,关闭长连接是:Connection:close
队头阻塞
http报文必须是一发一收,这就形成了一个先进先出的串行队列,前面的请求先处理。如果前面的请求处理太慢,后面的请求都需要等待。
http/1.1中缓解队头阻塞的方法是使用并发连接,通过域名分片的技术建立多个连接。