前言:相信不少同学在面试过程中都遇到过这个问题,本文将从输入URL到浏览器渲染页面过程共拆解为十个过程,如下所示
完整过程
1.输入URL地址
2.在浏览器缓存,系统缓存,路由器缓存查找所需文件,如果有直接获取,如果没有就下一步操作
3.dns域名解析,获得服务器IP地址
4.浏览器向服务器建立TCP连接,三次握手
5.TCP连接成功后,浏览器发送http请求包
6.服务器响应http请求,返回HTML文件
7.浏览器执行HTML文件,在这个过程中遇到link标签指向的css文件就向服务器请求并加载,script标签指向的js文件同理
8.解析HTML,渲染DOM树,解析css,生成CSSOM树,(注意,DOM树和CSSOM树是并行的,css解析并不会阻塞DOM树的解析,但是会阻塞DOM树的渲染),浏览器会结合DOM和CSSOM,生成渲染树Render Tree,Render Tree中只包含需要显示的可见元素,不包含不可见和隐藏的元素,包括元素几何信息。
9.浏览器根据Render Tree中的每个元素的几何信息,来计算出每个元素的位置,尺寸,边距等,这个过程称之为布局或者回流
10.浏览器根据计算出的几何信息,来将Render Tree中的每个元素渲染到屏幕上,转换为一个个像素点来构建图形,最终形成可视化的页面
三次握手
1.客户端向服务端发送建立连接请求
2.服务端应答客户端建立连接请求并确认
3.客户端确认与服务器确认连接建立连接
就像你约女神出去吃饭,你问“在吗?”,女神回“在的”,你回“你在呀,太好了!我想约你出去吃饭”。然后女神答应你的请求跟你出去吃饭(响应了你的资源请求)
咳咳,希望大家都可以三次握手成功
四次挥手
1.客户端向服务器发送释放连接请求
2.服务器响应释放连接请求,确认释放,并告诉应用层释放掉TCP连接
3.服务器向客户端发送释放连接请求,告诉客户端我也要断开连接,你同意吗?
4.客户端收到服务器的释放连接确认后,向服务器确认释放请求
你把女神约出来吃饭之后,发现女神其实并不是你喜欢的类型,你就跟她说“我们以后不要再联系了”,女神说“好啊,等我吃完这顿饭就走”,等了一会女神说“我吃完了,再也不见了,臭男人!”,你说“好啊,拜拜!”
关于更详细的TCP三次握手,四次挥手,可以看这篇文章