当在浏览器中输入 url 并按下回车,发生了什么?

60 阅读2分钟
  1. 浏览器自动补全协议、端口

    www.baidu.com -> www.baidu.com

  2. 浏览器自动完成url编码(url中不能出现非 ascii 字符)

    www.baidu.com/s?wd=你好 -> www.baidu.com/s?wd=%E4%BD…

  3. 浏览器根据 url 地址查找本地缓存,根据缓存规则看是否命中缓存,若命中缓存则直接使用缓存,不再发出请求

  4. 通过 DNS 解析找到服务器的IP地址

  5. 浏览器向服务器发出建立TCP连接的申请,完成三次握手后,连接通道建立

  6. 若使用了HTTPS协议,则还会进行SSL握手,建立加密信道。使用SSL握手时,会确定是否使用HTTP2

  7. 浏览器决定要附带哪些 cookie 到请求头中

  8. 浏览器自动设置好请求头、协议版本、cookie,发出 get 请求

  9. 服务器处理请求,进入后端处理流程。完成处理后,服务器响应一个HTTP报文给浏览器。

  10. 浏览器根据使用的协议版本,以及 Connection 字段的约定,决定是否要保留TCP连接。

  11. 浏览器根据响应状态码决定如何处理这一次响应

  12. 浏览器根据响应头中的Content-Type字段识别响应类型,如果是text/html,则对响应体的内容进行HTML解析,否则做其他处理

  13. 浏览器根据响应头的其他内容完成缓存、cookie的设置

  14. 浏览器开始从上到下解析HTML,若遇到外部资源链接,则进一步请求资源

  15. 解析过程中生成D0M树、CSS0M树,然后一边生成,一边把二者合并为渲染树(rendering tree),随后对渲染树中的每个节点计算位置和大小(reflow),最后把每个节点利用 GPU 绘制到屏幕(repaint)

  16. 在解析过程中还会触发一系列的事件,当D0M树完成后会触发 DOMContentLoaded事件,当所有资源加载完毕后会触发1oad事件