输入url到页面渲染完成,发生了什么?
从输入url到页面渲染完成,经历了以下几个步骤:
1.DNS解析,将域名解析为IP地址
- 浏览器dns缓存
- 系统dns缓存
- 路由器dns缓存
- 网络运营商dns缓存
- 递归搜索
2.TCP连接,TCP三次握手
- 第一次握手,由浏览器发起,告诉服务器我要发送请求了
- 第二次握手,由服务器发起,告诉浏览器我准备接受了,你赶紧发送吧
- 第三次握手,由浏览器发起,告诉服务器,我马上就发了,准备接受吧
3.发送请求
- 请求报文:HTTP协议的通信内容
4.接受响应
- 响应报文
5.渲染页面
- 遇见html标记,浏览器调用html解析器解析成token并构建dom树
- 遇见style/link标记,浏览器调用css解析器,处理css标记并构建cssom树
- 遇见script标记,调用JavaScript解析器,处理script代码
- 将dom树和cssom树合成一个渲染树
- 根据渲染树来计算布局,计算每个节点的几何信息(布局)
- 将各个节点颜色绘制到屏幕上(渲染)
注意:这五个步骤不一定按照顺序执行,如果dom树和cssom树被修改了,可能会执行多次布局和渲染。
往往实际页面中,这写步骤都会执行多次的。
6.断开连接,TCP四次挥手
- 第一次挥手:由浏览器发起的,告诉服务器,我东西法发送完了(请求报文),你准备关闭吧
- 第二次挥手:由服务器发起,告诉浏览器,我东西接受完毕了(请求报文),我准备关闭了,你也准备吧
- 第三次挥手:由服务器发起,告诉浏览器,我东西发送完了(响应报文),你准备关闭吧
- 第四次挥手:由浏览器发起,告诉服务器,我东西接受完了(响应报文),我准备关闭了,你也准备吧