一道经典面试题~~~~

179 阅读4分钟

从浏览器地址栏输入URL后,到页面渲染出来,整个过程都发生了什么?

这个是关于前端页面性能优化的一道经典面试题,本人在面试过程中也有遇到过这个问题,当时被问到感觉很懵逼。过后自己查找了一下资料,并学习了一下,最近又看到这个面试题,所以记个笔记吧。

首先这个面试题可以回答的非常细致,能从信号与系统,计算机原理,操作系统聊到网络通信,浏览器内核再到DNS解析,负载均衡,页面渲染等。 为了后面表述更清楚,就先将整个过程划分以下几个阶段:

  • DNS解析(如果IP直接访问则此过程省略)

  • 客户端与服务端进行TCP三次握手连接

  • 客户端发送HTTP请求

  • 服务器处理请求并返回HTTP报文

  • 浏览器解析渲染页面

  • 连接结束

也可以这么说 从输入URL到页面加载的主干流程如下:

1、浏览器的地址栏输入URL并按下回车。

2、浏览器查找当前URL的DNS缓存记录。

3、DNS解析URL对应的IP。

4、根据IP建立TCP连接(三次握手)。

5、HTTP发起请求。

6、服务器处理请求,浏览器接收HTTP响应。

7、渲染页面,构建DOM树。

8、关闭TCP连接(四次挥手)。

或者简单来说就是: 查找强缓存,DNS解析,建立TCP连接,发送HTTP请求,网络响应,页面渲染,解析过程,渲染

1网络请求线程开启

浏览器接收到我们输入的url到开启网络请求线程,这个阶段是在浏览器内部完成的,通过解析url之后,如果是http协议,则浏览器会新建一个网络请求线程去下载所需资源,

2 建立HTTP请求

这时候,主要工作分为:DNS解析和通信链路的建立 简单来说就是,首先发起请求的客户段浏览器要明确知道所要访问的服务器地址,然后建立通往该服务器地址的路径。

2.1-DNS解析

URL解析其实就是将url拆分为代表具体含义的字段,然后以参数的形式传入网络请求线程进一步处理,其中第一步就是DNS解析:我们知道在地址输入的域名并不是最后资源所在的真实位置,域名只是和ip地址的一个映射。网络服务器的IP地址那么多,不可能去记一串串数字,因此域名就产生了,域名解析的过程就是将域名还原为IP地址的过程: 首先浏览器先检查本地hosts文件是否有这个网址映射关系,如果有就调用这个IP地址映射,完成域名解析。

如果没找到则会查找本地DNS解析器缓存,如果查找到则返回。

如果还是没有找到则会查找本地DNS服务器,如果查找到则返回。

最后迭代查询,按根域服务器 ->顶级域,.cn->第二层域,hb.cn ->子域,www.hb.cn的顺序找到IP地址。

DNS域名解析: 浏览器向DNS服务器发起请求,解析该URL中的域名对应的IP地址。DNS服务器是基于UDP的,因此会用到UDP协议。

3--建立TCP连接

解析出IP地址后,根据IP地址和默认80端口,和服务器建立TCP连接

发起HTTP请求:  浏览器发起读取文件的HTTP请求,该请求报文作为TCP三次握手的第三次数据发送给服务器,服务器响应请求并返回结果:服务器对浏览器请求做出响应,并把对应的html文件发送给浏览器

关闭TCP连接 : 通过四次挥手释放TCP连接

简单一句话总结:输入url 然后交给DNS进行域名解析 获得IP地址确定的那台服务器建立TCP的链接,从而向服务器发起http请求 服务器处理完成后 返回数据(http响应返回)浏览器对加载到的资源进行语法分析,渲染页面