-
一个tcp连接可以发送集合http请求
答:在http1.1时 一个tcp连接建立后发送一个http请求连接就会断开 称为短连接 某些服务器对 Connection: keep-alive 的 Header 进行了支持。意思是说,完成这个 HTTP 请求之后,不要断开 HTTP 请求使用的 TCP 连接。这样的好处是连接可以被重新使用,之后发送 HTTP 请求的时候不需要重新建立 TCP 连接。 持久连接:既然维持 TCP 连接好处这么多,HTTP/1.1 就把 Connection 头写进标准,并且默认开启持久连接,除非请求中写明 Connection: close,那么浏览器和服务器之间是会维持一段时间的 TCP 连接,不会一个请求结束就断掉。
-
http请求发送与响应的顺序
答:HTTP/1.1 存在一个问题,单个 TCP 连接在同一时刻只能处理一个请求,
意思是说:两个请求的生命周期不能重叠,任意两个 HTTP 请求从开始到结束
的时间在同一个 TCP 连接里不能重叠。
虽然 HTTP/1.1 规范中规定了 Pipelining 来试图解决这个问题,但是这个功能在浏览器中默认是关闭的。
先来看一下 Pipelining 是什么:一个支持持久连接的客户端可以在一个连接中发送多个请求
(不需要等待任意请求的响应)。收到请求的服务器必须按照请求收到的顺序发送响应。
但是,HTTP2 提供了 Multiplexing 多路传输特性,可以在一个 TCP 连接中同时完成多个 HTTP 请求,
即多个http请求在tcp连接中并行执行。
- 浏览器对同一个host连接建立的数量有没有控制
答:Chrome 最多允许对同一个 Host 建立六个 TCP 连接。不同的浏览器有一些区别。
- 收到的 HTML 如果包含几十个图片标签,这些图片是以什么方式、什么顺序、建立了多少连接、使用什么协议被下载下来的呢?
如果图片都是 HTTPS 连接并且在同一个域名下,那么浏览器在 SSL 握手之后会
和服务器商量能不能用 HTTP2,如果能的话就使用 Multiplexing 功能在这个连接上进行多路传输。
不过也未必会所有挂在这个域名的资源都会使用一个 TCP 连接去获取,
但是可以确定的是 Multiplexing 很可能会被用到。
如果发现用不了 HTTP2 呢?或者用不了 HTTPS(现实中的 HTTP2 都是在 HTTPS 上实现的
,所以也就是只能使用 HTTP/1.1)。那浏览器就会在一个 HOST 上建立多个 TCP 连接,
连接数量的最大限制取决于浏览器设置,这些连接会在空闲的时候被浏览器用来发送新的请求,
如果所有的连接都正在发送请求呢?那其他的请求就只能等等了