一个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请求还是什么其它的?
参考文档:
浙公网安备 33010602011771号