HTTP请求和TCP之间的联系

169 阅读3分钟

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连接的报文

参考资料:www.bilibili.com/video/BV1Sw…

3. 参考资料

这个up主讲的蛮好的

www.bilibili.com/video/BV1Pg…