1. DNS解析,将域名解析为 ip 地址
- 浏览器DNS缓存
- 系统DNS缓存
- 路由器DNS缓存
- 网络运营商DNS缓存
- 递归搜索: (blog.baidu.com为例)
- .com 域名下查找DNS解析
- .baidu 域名下查找DNS解析
- blog 域名下查找DNS解析
- 出错了(都找不到)
2. TCP连接,TCP三次握手
- 由浏览器发起,告诉服务器,我要发送请求了 (在吗?)
- 由服务器发起,告诉浏览器,我准备接收了,你赶紧发送吧 (又干啥,麻溜的)
- 由浏览器发起,告诉服务器,我马上就发送了,你准备接收吧 (帮我查点东西,我现在拿给你看)
3. 发送请求
- 发送请求报文,HTTP协议的通信内容 (您看,就是这些)
4. 接受响应
- 接收响应报文 (查到了,拿去做事吧)
5. 渲染页面
- 遇见 HTML 标记,浏览器调用HTML解析器解析成Token并构建DOM树
- 遇见 style/link 标记,浏览器调用CSS解析器,处理CSS标记 并 构建CSSOM树
- 遇见 script 标记,调用javascript解析器,处理script代码(绑定事件,修改DOM树/CSSOM树)
- 将 DOM树 和 CSSOM树 合并成一个渲染树
- 根据渲染树来计算布局,计算每一个节点的几何信息(布局)
- 将各个节点颜色绘制到屏幕上(渲染)
注意: 这几个步骤不一定是按顺序执行的,如果DOM树或CSSOM树被修改了,可能会执行多次布局和渲染 往往页面中这些步骤都会执行多次
6. 断开连接,TCP四次挥手
- 由浏览器发起,告诉服务器,我东西(请求报文)发送完了,你准备关闭吧
- 由服务器发起,告诉浏览器,我东西(请求报文)接收完了,我准备关闭了,你也准备吧
- 由服务器发起,告诉浏览器,我东西(响应报文)发送完了,你准备关闭吧
- 由浏览器发起,告诉服务器,我东西(响应报文)接收完了,我准备关闭了,你也准备吧