1.url解析 首先浏览器会对输入的url进行解析,将其拆成不同的部分,比如说协议(http/https)、域名、端口号、路径和查询参数等。
2.DNS查询 浏览器需要通过DNS(域名系统)将域名解析为服务器的ip地址。它首先会检查本地的DNS缓存,如果缓存中存在域名对应的ip地址,就直接使用;如果没有,就会向本地DNS服务器发起查询请求。本地DNS服务器会按照递归查询和迭代查询向其他的DNS服务器递归查询,直到找到对应的ip返回给浏览器。其中迭代查询是按照根域、顶级域、权威域的顺序进行查询的。
3.建立连接 浏览器使用获取到的ip地址与服务器连接。对于http协议,通常使用tcp连接。在双方建立连接的过程中,会进行三次握手,以确保双方都能正常的收发数据。
4.发送请求 连接建立后,浏览器会根据url和用户的操作(比如说点击连接、提交表单)等构造http请求消息,并将其发送到服务器。http的请求消息包括请求方法、请求头、请求体。
5.服务器处理请求 服务器在接收到请求之后,会根据请求消息的内容进行处理,并返回响应的结果。
6.接收响应 浏览器接收服务器返回的http响应消息。响应消息的状态码包括200系表示成功,400系列表示未找到页面,500系列表示服务器内部的错误,响应消息还包括响应头(包含响应的附加信息,比如说内容类型和缓存信息),响应消息还包括响应体。其实就是html源代码,也就是一堆字符串。
7.页面的解析与渲染 浏览器开始对响应体中的html源代码进行解析,在解析html源代码的过程中,遇到静态资源比如说js css 视频等还会继续发起网络请求,静态资源有可能强缓存,此时就不用发送请求了。然后就正式开始解析了,html构建dom树,css构建cssom树,两者结合形成render tree。最后就是渲染浏览器根据渲染树进行布局,计算各个dom的尺寸、定位、最后绘制整个页面,遇到css、图片加载,可能会触发重新渲染。如果页面中包含js脚本,浏览器会在适当的时候执行他们。 最终就呈现出来看到的页面。