一个tcp上面能发送多少个http请求

大佬提出的问题:

  一道经典的面试题是从 URL 在浏览器被被输入到页面展现的过程中发生了什么,大多数回答都是说请求响应之后 DOM 怎么被构建,被绘制出来。但是你有没有想过,收到的 HTML 如果包含几十个图片标签,这些图片是以什么方式、什么顺序、建立了多少连接、使用什么协议被下载下来的呢?

我自己的问题:

  其实我一直在想一个问题,就是用户发送了请求后,服务端返回给用户一个 html页面,那么这个页面中是包含很多资源的!包含 图片、css、js等文件,响应返回的时候,只是返回的页面内容,这些uri地址也是被返回给了客户端(就是返回了这个html页面),然后客户端需要去根据静态资源的uri地址(因为浏览器解析这个html页面,进行渲染),去得到静态资源的内容,这时候uri很多,浏览器是怎么获取这些静态资源的?在一个tcp上面同时发送多个http请求?还是新创建了多个TCP, 在每个tcp上面发送请求;还是http在一个tcp上面发送,但是要排队,一个请求完成(收到了响应数据)再发送下一个请求?

 

http1.1什么时候断开tcp的连接:

  http1.0 的时候,服务器发送完http响应后,就会关闭TCP

  http1.1的时候,通过头部的 connection属性来控制tcp的关闭,默认是keep-alive,也就是长连接,当值为close的时候,会断开连接。那么什么时候值会为close呢?也就是什么时候断开呢?总不能一直不断开吧!!!》》》》》》

 

一个TCP发送多个http请求吗?

  显然,在长连接的情况下,一个TCP是可以发送多个http请求的,一个请求响应结束了,在发送下一个。

  那么,可以同时发送多个http请求,显然,如果可以请求效率将会被大大提高。(如果一个tcp上面发送了多个htt请求,服务器端又是怎么处理的呢?服务端根据什么创建的线程。每次来一次http请求就创建一个线程吗(或者说有线程池的话,就让一个线程来处理这个http请求),还是一个tcp对应服务端的一个线程);加入了nginx的负载均衡呢,又是什么样的呢?》》》》》》

  http1.1中用 Pipeling来解决,但是浏览器默认是关闭这个功能。(说明不怎么样。。。)

  http2.0 用 Multiplexing(多路复用)来实现在一个tcp上面同时发送多个http请求!

Multiplexing怎么实现的?原理?

  

http1.1怎么提高页面加载效率?

  由于http1.1 的 pipling默认是关闭的,那么怎么提高加载页面的效率呢?

  1)tcp的长连接,在同一个tcp连接上顺序发送多个http请求

  2)建立多个tcp连接

 

为什么有的时候刷新页面不需要重新建立ssl连接

   因为tcp还保持着连接,就不需要重新建立ssl连接了,ssl连接是在建立tcp连接之后,发起的。

ssl什么时候建立的连接?

   ssl连接是在发起https连接的时候,先建立tcp连接,然后建立ssl连接,也就是得到证数,生成对称密钥,之后就基于这个对称密钥进行加密传输。只要tcp没有断开,就不需要再次建立tcp连接了。

浏览器对同一host建立的tcp连接数量有没有限制?

  有的!chrome浏览器对同一host最多允许建立6个TCP连接。

host是什么?

  host是http的request请求头的一个属性。它存在的目的就是dns解析完后,发送给服务器的url请求中就没有域名了,有的就是ip地址,加入host的目的就是在要一台服务器上面部署了多个网站的时候,能将请求发送到正确的网站中!(个人感觉,用户的请求都是发给nginx的,nginx根据host的内容将请求分发给不同的服务器处理)

    有多个dns域名映射到同一个服务器的。

(dns解析的时候,解析端口号了吗???没有,dns解析就是将域名解析为ip地址)

 

 

 

  

服务端是怎么处理客户端的请求?一个服务端的线程是对应着用户的一个http请求还是什么其它的?

 

 

 

参考文档:

知乎大佬的解答: https://zhuanlan.zhihu.com/p/61423830

posted @ 2020-07-21 19:14  你眼里的星辰  阅读(761)  评论(0)    收藏  举报