输入 url 会发生什么
- 浏览器自动补全协议、端口
- 浏览器自动完成
url
编码 - 浏览器根据
url
查找本地缓存,根据缓存规则看是否命中缓存,若命中缓存则直接使用缓存,不再发出请求 - 通过
DNS
解析找到服务器的IP
地址 - 浏览器向服务器发出简历
TCP
连接的申请,完成三次握手后,连接通道建立 - 若使用了
HTTPS
协议,则还会进行SSL
握手,建立加密信道,使用SSL
握手时,会确定是否使用HTTP2
- 浏览器决定要附带哪些
cookie
到请求头中 - 浏览器自动设置好请求头、协议版本、
cookie
,发出GET
请求 - 服务器处理请求,进入后端处理流程,完成处理后,服务器响应一个
HTTP
报文给浏览器 - 浏览器根据使用的协议版本,以及
Connection
字段的约定,决定是否要保留TCP
连接 - 浏览器根据响应状态码决定如何处理这一次响应
- 浏览器根据响应头中的
Content-Type
字段识别响应类型,如果是text/html
,则对响应体的内容进行HTML
解析,否则做其他处理 - 浏览器根据响应头的其它内容完成缓存、
cookie
的设置 - 浏览器开始从上到下解析
HTML
,若遇到外部资源链接,则进一步请求资源 - 解析过程中生成
DOM 树
、CSSOM 树
,然后一边生成,一边把二者合并为渲染树(rendering tree)
,随后对渲染树中的每个节点计算位置和大小(reflow
),最后把每个节点利用GPU
绘制到屏幕(repaint
) - 在解析过程中还会触发一系列的事件,当
DOM 树
完成后会触发DOMContentLoaded
事件,当所有资源加载完毕后会触发load
事件