想要回答这个问题先要知道这5个问题:
1.TCP连接是否会在一个请求结束后就断开链接?
在HTTP1.0中一个服务器在发送完一个http响应后会断开tcp链接,每次请求都会重新建立和断开tcp连接,这样代价就很大,虽然http标准中没有设定但是在某些服务器header中对connection keep alive进行支持,这样设置的目的是完成请求后不要立即进行断开,连接可以重复使用,再次发送http请求的时候不需要重新建立连接,同时维持连接ssl开销也可以避免。在http1.1中就把connection头写进标准,并默认开启持久连接。除非请求头中写明connection close,不然浏览器和服务器之间会维持一段时间的TCP连接。问题的答案是:默认情况下建立TCP连接不会断开,只有在请求头中声明connection:close才会在请求完成之后断开连接。
2.一个TCP连接可以发送多少个HTTP请求?
一个tcp连接可以发送多个http请求
3.一个TCP连接中的多个http请求可以一起发送吗?
http1.1存在一个问题,单个TCP连接在同一时刻只能处理一个请求,也就是两个请求的生命周期不能重叠。在http1.1存在流水线技术可以完成多个请求同时发送但是由于浏览器默认是关闭的,所以认为这是不可行的。在http2中由于多路传输特性的存在多个http请求可以在同一个TCP连接中并行发送。在http1.1时代浏览器是如何提高页面加载效率的呢?首先维持和服务器已经建立的TCP连接,在同一个连接上顺序处理多个请求,其次和服务器建立多个TCP链接。
4.为什么有的时候刷新页面不需要重新建立SSL?
因为tcp链接有的时候会被浏览器和服务器维持一段时间,tcp不需要重新建立连接那ssl自然也会使用之前的。
5.客户端对同一个host建立的TCP连接数有没有限制?
有数量限制,不同的浏览器有一些区别,chrome浏览器最多允许对同一个host建立6个TCP连接
总结:页面如果包含几十个图片标签,这些图片是以什么方式、什么顺序建立了多少连接、使用什么协议被下载下来的呢?如果图片都是https连接,并且都是在同一个域名下,那么浏览器在SSL握手之后会和服务器协商能不能用HTTP 2,如果能就会使用多路传输特性在这个连接上进行多路传输,不过也未必所有挂在这个域名下的资源都会使用同一个TCP连接去获取。可以确定的是多路传输特性很可能会被用到。如果发现用不了HTTP 2,或者用不了https,应为现实中的http2都是基于https实现的,所以只能使用http1.1,那浏览器就会在一个host上建立多个TCP连接,连接数量的最大限制取决于浏览器的限制,这些连接会在空闲的时候被浏览器用来发送新的请求。如果所有的连接都正在发送请求的话那其他的请求就只能等待了。
标签:浏览器,请求,http,TCP,发送,HTTP,连接 From: https://www.cnblogs.com/doumenwangjian/p/17017729.html