跳到主要内容

输入 url 地址后

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