从url到页面的过程发生了什么

从浏览器中输入url到页面的形成,这中间发生了什么,请往下看吧。

输入url --- 解析url --- 缓存判断 --- DNS解析 ---获取MAC地址 --- TCP三次握手 --- 发送HTTP请求 --- 响应HTTP请求 ---页面渲染( 构建DOM --- 构建CSSOM --- 构建渲染树 --- 布局 --- 绘制)--- TCP四次挥手

目录

解析url

缓存判断

DNS解析

获取MAC地址

TCP三次握手

HTTPS握手

返回数据

页面渲染

TCP四次挥手


解析url

分析所需要使用的传输协议和请求的资源的路径。

如果该路径有盘符(C:/..... ,D:/....),说明请求的资源是本地的,则浏览器会从本地文件系统中读取相应的文件内容,解析文件,创建DOM树和CSS树,构建渲染树,布局和绘制。

缓存判断

如果不是上述情况,浏览器会判断请求的资源是否在缓存里,如果在且没有失效,那么直接使用,否则向服务器发起新的请求。

DNS解析

将url中的域名解析为IP地址。先判断本地是否有该域名的缓存,有则使用,没有则向本地DNS服务器发起请求,本地DNS服务器也会检查缓存,如果没有继续向下查找....

顺序:本地缓存---本地DNS服务器---根域名服务器---顶级域名服务器---权威域名服务器。

最终获取到域名的IP地址,将这个地址发给请求的用户。

获取MAC地址

浏览器得到IP地址之后,数据传输还需要知道目的主机MAC地址。

数据链路层的发送需要添加通信双方的MAC地址。

TCP三次握手

TCP建立的三次握手过程:

(1)客户端向服务端发送一个SYN连接请求报文段和一个随机序号

(2)服务端接收到请求后向客户端发送一个SYN+ACK报文段,确认连接请求,并向客户端发送一个随机序号。

(3)客户端接收到服务端的确认应答后,进入连接建立的状态,同时向服务端发送一个ACK确认报文段,服务端接收到确认之后,也进入连接建立状态,这样双方的连接就建立起来了。

常见面试题:

为什么不是两次握手,而是三次?

为了实现可靠数据传输, TCP 协议的通信双方, 都必须维护一个序列号, 以标识发送出去的数据包中, 哪些是已经被对方收到的。 三次握手的过程即是通信双方相互告知序列号起始值, 并确认对方已经收到了序列号起始值。 如果只是两次握手, 至多只有连接发起方的起始序列号能被确认, 另一方选择的序列号则得不到确认。

HTTPS握手

如果使用的HTTPS协议,在通信之前还存在TLS的一个四次握手的过程:

(1)首先由客户端向服务器端发送使用的协议的版本号、一个随机数和可以使用的加密方法。

(2)服务器端收到后,确认加密的方法,也向客户端发送一个随机数和自己的数字证书。

(3)客户端收到后,首先检查数字证书是否有效,如果有效,则再生成一个随机数,并使用证书中的公钥对随机数加密,然后发送给服务器端,并且还会提供一个前面所有内容的 hash 值供服务器端检验。

(4)服务器端接收后,使用自己的私钥对数据解密,同时向客户端发送一个前面所有内容的 hash 值供客户端检验。

返回数据

当页面请求发送到服务器后,服务器端会返回一个HTML文件作为响应,浏览器接收到响应后,开始对HTML文件进行解析。

页面渲染

浏览器根据HTML文件构建DOM树,根据解析到的CSS文件构建CSSOM树,如果遇到script标签,判断是否含有defer或async属性,要不然script的加载和执行会造成页面渲染的阻塞。当DOM树和CSSOM树构建好之后,根据它们来构建渲染树,再根据渲染树进行布局,布局完成之后,使用浏览器的UI接口对页面进行绘制,这个时候整个页面就显示出来了。

拓展:

defer和async这两个script资源提示符,都是异步加载js内容。但defer是等dom元素解析完之后,执行js内容;async是当js加载完成之后,直接执行,不管dom元素有没有解析完,js执行完,如果还有dom元素没有解析,则继续解析dom元素。

TCP四次挥手

最后一步是TCP断开连接的四次挥手过程:

(1)若客户端认为数据发送完成,则它需要向服务端发送连接释放请求。

(2)服务端收到连接释放请求后,会告诉应用层要释放 TCP连接,然后会发送 ACK 包,并进入关闭等待状态( CLOSE_WAIT)。

此时,从TCP客户进程到TCP服务器进程这个方向的连接就释放掉了,TCP连接处于半关闭状态。因为 TCP 连接是双向的,所以服务端仍旧可以发送数据给客户端,服务端如果此时还有没发完的数据会继续发送。

(3)服务端数据发送完毕后,会向客户端发送连接释放请求,然后服务端便进入最后确认状态(LAST-ACK)。

(4)客户端收到释放请求后,向服务端发送确认应答,当服务端收到确认应答后,便进入关闭状态(CLOSED );客户端进入 时间等待状态(TIME-WAIT ),该状态会持续 2MSL(MSL:最大段生存期,指报文段在网络中生存的时间,超时会被抛弃) 时间,若该时间段内没有服务端的重发请求的话,就进入关闭状态(CLOSED )。

这就是从url到页面的大致过程。

如果本文对你有帮助,希望能得到你的点赞或收藏或关注,这是对我最好的鼓励;

如你有问题或疑惑,欢迎在评论区写下,必将努力解答;

如本文有误区,希望你不吝赐教,让我们共勉!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值