HTTP请求发送之前,需要先建立TCP连接,只有TCP连接建立,才可以发送HTTP请求。
当HTTP请求发送并响应完成,有两种情况,
操作 | Are |
关闭TCP连接 | 当HTTP发送下一个请求的时候,需要在此进行三次握手,建立TCP连接 |
不关闭TCP连接 | 长连接,HTTP发送下一个请求的时候可以直接发送,不需要再次建立TCP连接 |
在浏览器中,ConnectionID 表示的就是TCP建立连接的ID
以google浏览器为例子, 在常见网站中我们期望首页可以并发发送请求,以提高用户体验。
google可以提供最多6个TCP连接。
这也就意味着如果在一个首页中,需要同时发送7个请求,那么会同时创建6个TCP链接,并发送对应的6个请求,当这6个请求中有一个已经完成请求响应了,最后一个请求才可以接着发送请求。
在浏览器中不设置Connection,会默认是keep-alive(长连接), 如下:
设置关闭长连接,nodejs中代码如下:
response.writeHead(200, {
"Content-Type": "image/jpg",
"Connection" : "close" // 每个请求都会重新建立TCP连接
})
浏览器中:(此时所有的ConnectionID的值都是不同的)
在HTTP2中,会有信道复用,意味着在一个TCP连接上可以并发发送多个HTTP请求。例如在google.com域名下的所有请求都是只会创建一个TCP连接。