TCP连接
通过http协议进行数据传输的前提是建立TCP连接,一个TCP连接的建立需要三次握手过程,在一个TCP连接上可以进行客户端与服务器之间的http通信.
在http/1.x的版本中,一个TCP连接中的http通信是有顺序的,只有前一个http通信完成后,后面的http通信才可以接着进行,故在一个服务中要实现多个http通信的并行过程,则需要多个TCP连接
http/2.0版本中,在一个TCP连接中,可以同时进行多个http同信过程,即在一个TCP连接中实现了http通信的并行执行,大大提高了效率
短连接与长连接
短连接是指一次http通信完成后,就会关闭TCP连接.
长连接是指在一次http通信完成后,不会立即关闭TCP连接,只需要建立一次 TCP 连接就能进行多次 HTTP 通信.
当浏览器访问一个包含多张图片的 HTML 页面时,除了请求访问 HTML 页面资源,还会请求图片资源。如果每进行一次 HTTP 通信就要新建一个 TCP 连接,那么开销会很大。
采用长连接则只需要建立一次 TCP 连接就能进行多次 HTTP 通信。
- 从 HTTP/1.1 开始默认是长连接的,如果要断开连接,需要由客户端或者服务器端提出断开,使用
Connection : close
; - 在 HTTP/1.1 之前默认是短连接的,如果需要使用长连接,则使用
Connection : Keep-Alive
。
流水线
默认情况下,HTTP 请求是按顺序发出的,下一个请求只有在当前请求收到响应之后才会被发出。由于会受到网络延迟和带宽的限制,在下一个请求被发送到服务器之前,可能需要等待很长时间。
流水线是在同一条长连接上发出连续的请求,而不用等待响应返回,这样可以避免连接延迟。
参考