- 比如输入
www.baidu.com
- 浏览器自动补全协议、端口
- 浏览器自动完成 url 编码(中文)非 ASCII 字符进行编码
- 浏览器根据 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 树完成后会触发 DOMCotentLoaded 事件,当所有资源加载完毕后会触发 load 事件
输入 url 地址后
· 阅读需 3 分钟