用户在浏览器中输入一个 url 或直接点开一个 url 后,就可以看到网页内容了。虽然可以直接显示,但在这背后却经过了非常复杂的操作,主要有五大过程:
1. 浏览器根据域名找到对应的 ip 地址(远程服务器)
ip 指的是网络为每一台电脑分配的一个地址。由于 ip 地址不容易被记住,所以有了域名,浏览器拿到域名后,首先要先把域名解析成 ip,然后找到 ip 对应的机器。解析域名通常使用的方法是 DNS 解析,为了让查找过程更高效,浏览器和操作系统都会将每次的解析结果缓存起来,在下次解析的时候,就会先从缓存中去查找 ip(解析方式:查找本地缓存中 ——> DNS数据缓存中 ——> DNS解析对应ip)。
2. 浏览器与远程服务器建立连接(tcp连接 三次握手)
找到对应的 ip 后,就要建立 TCP 连接了,只有连接成功,双方才可以发送数据。连接分为三次,分别是浏览器向服务器端发送 SYN 请求;服务器接收到请求后,会向浏览器端发送 SYN/ACK 数据包进行确认信息;最后浏览器会向服务器端传入 ACK 数据包来表示可以通信了。
3. 浏览器与远程服务器发送和接收数据
建立连接后,浏览器和服务器就可以进行通信了。浏览器通过向服务器发送 http 请求,从而获得响应数据。这其中的过程包含了:请求报文(请求行、请求头、主体)、响应报文(状态行、响应头、响应正文)。
4. 浏览器与远程服务器断开连接(tcp断开 四次挥手)
两端通信结束之后,为了不浪费系统资源,就需要考虑断开连接了。TCP 的断开分为四次,因为在浏览器向服务器端发出可以断开连接信息的时候,服务器可能还存在一些数据没有传输完成,这时服务器需要去确认一下数据是否全都传输完成,如果全都完成了,服务器才会告诉浏览器可以断开了。
5. 浏览器渲染
1)构建 DOM 树:渲染进程将 HTML 内容转换为能够读懂的 DOM 树结构;
2)样式计算:渲染引擎将 CSS 样式表转化为浏览器可以理解的 styleSheets,计算出 DOM 节点的样式;
3)布局阶段:创建布局树,并计算元素的布局信息;(排除script、meta等功能化和非视觉节点)
4)分层:对布局树进行分层,并生成分层树;(生成图层树,因为有不同的层级要求)
5)栅格化:合并线程将图层分图块,并栅格化将图块转换成位图;(视图进行分割)
6)显示:合并线程发送绘制图块命令给浏览器进程。浏览器进程根据指令生成页面,并显示在页面;
来源地址:https://blog.csdn.net/forever__fish/article/details/129017711