著名前端面试题:
一个页面从输入 URL 到页面加载显示完成,这个过程中都发生了什么?
- DNS解析
DNS解析的过程就是寻找哪台机器上有你需要资源的过程。当你在浏览器地址栏输入一个地址比如:www.baidu.com,其实并不是百度真正的地址,这只是方便人们记忆和理解所设计的,真正的地址是IP地址,而www.baidu.com是域名(ip地址和域名并不是一一对应的),DNS解析就是将你输入的域名解析成ip地址。
查找(解析)过程:搜索浏览器自己的DNS缓存 --> 搜索操作系统中的DNS缓存 --> 搜索操作系统的hosts文件 --> 发送域名到本地域名服务器查询 --> 向根域名服务器查询 --> 向顶级域名服务器查询,
得到ip地址,返回给浏览器,同时浏览器将ip地址缓存 - TCP连接
得到服务器的ip地址后,接下来开始连接,总的来说需要经历以下三个过程(简称三次握手):- 主机想服务器发送一个建立连接的请求(您好,我想认识您);
- 服务器接到请求后发送同意连接的信号(好的,很高兴认识您);
- 主机接到同意连接的信号后,再次向服务器发送了确认信号(我也很高兴认识您),自此,主机与服务器建立了连接
- 发送HTTP请求
浏览器根据URL内容生成HTTP请求,HTTP报文被包裹在TCP报文中发送 ,服务器收到TCP报文是会解包提取出HTTP报文,它主要由三部分组成- 请求行:请求方法 资源路径 HTTP协议版本
- 请求报头:请求报头允许客户端向服务器传递请求的附加信息和客户端自身的信息。
- 请求正文
- 服务器处理请求并返回HTTP报文
HTTP响应报文也是由三部分组成: 状态码, 响应报头和响应报文。 - 浏览器解析渲染页面
浏览器是一个边解析边渲染的过程。首先浏览器解析HTML文件构建DOM树,然后解析CSS文件构建渲染树,等到渲染树构建完成后,浏览器开始布局渲染树并将其绘制到屏幕上。 - 连接结束
- 主机向服务器发送一个断开连接的请求(不早了,我该走了);
- 服务器接到请求后发送确认收到请求的信号(知道了);
- 服务器向主机发送断开通知(我也该走了);
- 主机接到断开通知后断开连接并反馈一个确认信号(嗯,好的),服务器收到确认信号后断开连接;