你猜一个TCP连接上面能发多少个HTTP请求?

  • 时间:
  • 浏览:30
  • 来源:空间引流吧_提供小刀辅助网技术_蚂蚱辅助网资讯

一道经典的面试题是从 URL 在浏览器被被输入到页面展现的过程中发生了那先 ,大多数回答都在说请求响应但是 DOM 怎样被构建,被绘制出来。但后该 你有如此想过,收到的 HTML 但是富含几三个白图片标签,那先 图片是以那先 最好的最好的办法、那先 顺序、建立了几个连接、使用那先 协议被下载下来的呢?

要读懂这名 问题图片图片,亲戚亲戚朋友还要先出理 下面三个白问题图片图片:

  • 现代浏览器在与服务器建立了原先 TCP 连接后算不算 会在原先 HTTP 请求完成后断开?那先 情况表下会断开?
  • 原先 TCP 连接还要对应几个 HTTP 请求?
  • 原先 TCP 连接中 HTTP 请求发送还要同时发送么(比如同时发原先请求,再原先响应同时接收)?
  • 为那先 有的但是刷新页面不还要重新建立 SSL 连接?
  • 浏览器对同一 Host 建立 TCP 连接到数量有如此限制?

先来谈谈***个问题图片图片:现代浏览器在与服务器建立了原先 TCP 连接后算不算 会在原先 HTTP 请求完成后断开?那先 情况表下会断开?

在 HTTP/1.0 中,原先服务器在发送完原先 HTTP 响应后,会断开 TCP 链接。而且原先每次请求后该 重新建立和断开 TCP 连接,代价过大。不要 不要 我着实标准中如此设定,一点服务器对 Connection: keep-alive 的 Header 进行了支持。

意思是说,完成这名 HTTP 请求但是,从不断开 HTTP 请求使用的 TCP 连接。原先的好处是连接还要被重新使用,但是发送 HTTP 请求的但是不还要重新建立 TCP 连接,以及但是维持连接,如此 SSL 的开销也还要出理 ,两张图片是我短时间内两次访问 github.com 的时间统计:

头一次访问,有初始化连接和 SSL 开销

初始化连接和 SSL 开销消失了,说明使用的是同原先 TCP 连接

持久连接:既然维持 TCP 连接好处如此多,HTTP/1.1 就把 Connection 头写进标准,而且默认开启持久连接,除非请求中写明 Connection: close,如此浏览器和服务器之间是会维持一段时间的 TCP 连接,不不原先请求结速英文就断掉。

不要 不要 ***个问题图片图片的答案是:默认情况表下建立 TCP 连接不不断开,必须在请求报头中声明 Connection: close 才会在请求完成后关闭连接。

第三个白问题图片图片:原先 TCP 连接还要对应几个 HTTP 请求?

了解了***个问题图片图片但是,我我着实这名 问题图片图片但是有了答案,但是维持连接,原先 TCP 连接是还要发送多个 HTTP 请求的。

第原先问题图片图片:原先 TCP 连接中 HTTP 请求发送还要同时发送么(比如同时发原先请求,再原先响应同时接收)?

HTTP/1.1 发生原先问题图片图片,单个 TCP 连接在同一时刻必须出理 原先请求,意思是说:原先请求的生命周期必须重叠,任意原先 HTTP 请求从结速英文到结速英文的时间在同原先 TCP 连接里必须重叠。

我着实 HTTP/1.1 规范中规定了 Pipelining 来试图出理 这名 问题图片图片,而且这名 功能在浏览器中默认是关闭的。

先来看一下 Pipelining 是那先 ,RFC 2616 中规定了:

A client that supports persistent connections MAY "pipeline" its requests (i.e., send multiple requests without waiting for each response). A server MUST send its responses to those requests in the same order that the requests were received.

原先支持持久连接的客户端还要在原先连接中发送多个请求(不还要停留任意请求的响应)。收到请求的服务器还要按照请求收到的顺序发送响应。

至于标准为那先 如此设定,亲戚亲戚朋友还要大约推测原先意味着着:但是 HTTP/1.1 是个文本协议,同时返回的内容也从必须区分对应于哪个发送的请求,不要 不要 顺序还要维持一致。比如你向服务器发送了原先请求 GET /query?q=A 和 GET /query?q=B,服务器返回了原先结果,浏览器是如此最好的最好的办法根据响应结果来判断响应对应于哪原先请求的。

Pipelining 这名 设想看 起来比较美好,而且在实践中会出現一点问题图片图片:

  • 一点代理服务器必须正确的出理 HTTP Pipelining。
  • 正确的流水线实现是僵化 的。
  • Head-of-line Blocking 连接头阻塞:在建立起原先 TCP 连接但是,假设客户端在这名 连接连续向服务器发送了几个请求。按照标准,服务器应该按照收到请求的顺序返回结果,假设服务器在出理 ***请求时花费了几瓶时间,如此里面所有的请求都还要等着***请求结速英文也能响应。

不要 不要 现代浏览器默认是不开启 HTTP Pipelining 的。

而且,HTTP2 提供了 Multiplexing 多路传输形状,还要在原先 TCP 连接中同时完成多个 HTTP 请求。至于 Multiplexing 具体怎样实现的而且原先问题图片图片了。亲戚亲戚朋友还要看一下使用 HTTP2 的效果。

绿色是发起请求到请求返回的停留时间,浅蓝色是响应的下载时间,还要想看 都在在同原先 Connection,并行完成的

不要 不要 这名 问题图片图片都在了答案:在 HTTP/1.1 发生 Pipelining 技术还要完成这名 多个请求同时发送,而且但是浏览器默认关闭,不要 不要 还要认为这是不可行的。在 HTTP2 中但是 Multiplexing 特点的发生,多个 HTTP 请求还要在同原先 TCP 连接中并行进行。

如此在 HTTP/1.1 时代,浏览器是怎样提高页面加载速率单位单位的呢?主要有下面两点:

  • 维持和服务器但是建立的 TCP 连接,在同一连接上顺序出理 多个请求。
  • 和服务器建立多个 TCP 连接。

第三个白问题图片图片:为那先 有的但是刷新页面不还要重新建立 SSL 连接?

在***个问题图片图片的讨论中但是有答案了,TCP 连接有的但是该 被浏览器和服务端维持一段时间。TCP 不还要重新建立,SSL 自然也会用但是的。

第三个白问题图片图片:浏览器对同一 Host 建立 TCP 连接到数量有如此限制?

假设亲戚亲戚朋友还发生 HTTP/1.1 时代,那个但是如此多路传输,当浏览器拿到原先有几十张图片的网页该怎样办呢?肯定必须只开原先 TCP 连接顺序下载,那样用户肯定等的不能自己受,而且但是每个图片都开原先 TCP 连接发 HTTP 请求,那电脑但是服务器都但是受不了,而且有 30 张图片语句总必须开 30 个TCP 连接吧,你的电脑同意 NAT 而且后该 同意。

不要 不要 答案是:有。Chrome 最多允许对同原先 Host 建立三个白 TCP 连接。不同的浏览器有一点区别。

如此回到最结速英文的问题图片图片,收到的 HTML 但是富含几三个白图片标签,那先 图片是以那先 最好的最好的办法、那先 顺序、建立了几个连接、使用那先 协议被下载下来的呢?

但是图片都在 HTTPS 连接而且在同原先域名下,如此浏览器在 SSL 握手但是该 和服务器商量还要用 HTTP2,过还要语句就使用 Multiplexing 功能在这名 连接上进行多路传输。不过也从不不所有挂在这名 域名的资源后该 使用原先 TCP 连接去获取,而且还要选折 的是 Multiplexing 很但是该 被用到。

但是发现用不了 HTTP2 呢?但是用不了 HTTPS(现实中的 HTTP2 都在在 HTTPS 上实现的,不要 不要 也而且必须使用 HTTP/1.1)。那浏览器就会在原先 HOST 上建立多个 TCP 连接,连接数量的***限制取决于浏览器设置,那先 连接会在空闲的但是被浏览器用来发送新的请求,但是所有的连接都正在发送请求呢?那一点的请求就必须等等了。

【编辑推荐】

【责任编辑:

赵宁宁

TEL:(010)68476306】



点赞 0