1. 背景
正确的理解HTTP的规范和TCP之间的关系有助于我们更好的进行web开发,在开发前端方面也大有裨益
2. demo
2.1 TCP连接是否会在一个请求结束后就断开连接
HTTP1.0中,一个服务器在发送完一个HTTP响应后,会断开TCP连接,每次请求都会重新请求建立和断开连接,代价比较大,虽然HTTP标准中没有设定,但某些服务器在header中对connection keep alive进行支持,就是完成这个http请求之后,不要断开HTTP请求使用的TCP连接,这样TCP连接可以重复被使用,维持连接ssl的开销也可以避免
HTTP1.1 就把connection头写进标准,并且默认开启持久连接,除非请求头中写明connection:close,不然浏览器和服务器之间会维持一段时间的TCP连接,不会一个请求以后就断开连接 所以默认情况下建立TCP连接不会断开,只有在请求头中声明connection:close才会在请求之后断开连接
Connection:close
Connection:keep-alive
2.2 一个TCP链接可以发送多少个HTTP请求么
如果维持TCP连接,一个TCP连接是可以发送多个HTTP请求的
2.3 一个TCP连接中多个HTTP请求可以一起发送么
HTTP1.1 存在一个问题,单个TCP连接在同一时刻只能处理一个请求,两个请求的生命周期不能重叠,任意两个HTTP请求从开始到结束的时间在同一个TCP连接里不能重叠 在HTTP1.1中存在流水线技术,可以完成多个请求同时发送,但是浏览器默认是关闭的,所以认为是不可行的 hTTP2.0 提供了多路传输特性,可以在同一个TCP连接中完成多个HTTP请求并行发送
chrome浏览器最多允许对同一个host建立6个TCP连接
2.4 收到的HTML页面中如果包含几十个图片标签,这些图片是以什么方式、什么顺序建立了多少链接,使用了什么协议被下载下来呢
如果图片都是https连接,并且在同一个域名下面,name浏览器在SSL握手之后会和服务器协商能不能用HTTP2.0,如果能就会用多路传输特性,在这个连接上进行多路传输 如果用不了http2.0,那么只能使用http1.1,浏览器就会在一个host上建立多个TCP连接,链接数量的最大限制取决于浏览器的设置,这些链接会在空闲的时候被浏览器用来发送新的请求 如果所有的链接都正在发送请求的话,那么其他的请求只能等待了
2.5 什么叫长连接
长连接:客户端和服务段建立了三次握手以后,开始传数据,如果当前的数据传输完成了,客户端或者服务器没有主动关闭连接,当前的TCP连接是不会关闭的
HTTP1.0 使用的是短连接,现在都使用HTTP1.1,都是长连接,HTTP的响应头里面会有connection:keep-alive,有的话就代表使用了长连接
keeplive的探活包是不可以被改变的
长连接指的是HTTP连接,TCP连接是没有短连接这种说法的
RST包:非正常关闭TCP连接的报文
3. 参考资料
这个up主讲的蛮好的