从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到页面的大致过程。

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

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

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

  • 14
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 好的,我了解了。关于您的问题,整个过程可以分为以下几个步骤: 1. 输入URL:当您在浏览器地址栏中输入URL时,浏览器会将该URL发送到域名系统(DNS),通过域名系统将URL转化为IP地址。 2. 发送HTTP请求:浏览器根据URL发起HTTP请求,请求访问Web服务器的特定资源。 3. 服务器响应:当Web服务器接收到请求时,它将处理请求并返回所请求的资源。 4. 浏览器渲染:浏览器收到服务器响应后,它将解析HTML源代码,并根据CSS样式表和JavaScript代码来渲染页面。 5. 页面展示:最终,浏览器将HTML、CSS和JavaScript代码解析完毕后,它会在屏幕上展示出页面内容。 以上就是从输入URL页面展示的整个过程,希望能够帮到您。 ### 回答2: 当我们在浏览器的地址栏中输入URL时,整个过程可以分为以下几个步骤: 1. DNS解析:浏览器首先会根据URL中的域名(例如www.example.com)进行DNS解析,将域名解析为对应的IP地址。这一步骤是为了找到存放网页的服务器。 2. 建立TCP连接:浏览器通过IP地址与服务器建立TCP连接。TCP协议提供可靠的连接,确保数据的完整性。 3. 发起HTTP请求:一旦建立了TCP连接,浏览器会向服务器发起HTTP请求,请求包括请求方法、请求头、请求体等信息。请求方法可以是GET、POST等,服务器根据请求的不同做出相应的响应。 4. 服务器处理请求并响应:服务器接收到浏览器的请求后,会根据请求的内容进行相应的处理。处理包括读取数据库、执行后端代码等操作。之后,服务器会生成响应对象,包含响应状态码、响应头、响应体等信息。 5. 接收服务器响应:浏览器接收到服务器的响应后,根据响应头中的Content-Type确定响应的数据类型。如为HTML类型,则浏览器会将响应的HTML代码解析成DOM树。 6. 解析页面并渲染:浏览器根据DOM树构建渲染树,并依据CSS样式对各元素进行布局和样式计算,最终生成页面的渲染结果。同时,浏览器也会执行页面中的JavaScript代码。 7. 页面展示:最后,浏览器将渲染好的页面内容显示在用户的视窗中,用户可以看到页面的展示效果。 总结起来,从输入URL页面展示,经历了DNS解析、建立TCP连接、发起HTTP请求、服务器处理请求并响应、接收服务器响应、解析页面并渲染等多个步骤。最终,浏览器将渲染好的页面内容显示给用户。 ### 回答3: 从输入URL页面展示,大致经历如下步骤: 1. 域名解析:当我们在浏览器中输入URL后,首先会进行域名解析。浏览器会向DNS服务器发送域名请求,获取该域名对应的IP地址。 2. 建立连接:浏览器通过获取到的IP地址与Web服务器建立TCP连接。这个过程使用的是三次握手协议,确保连接的可靠性。 3. 发送请求:建立连接后,浏览器会发送HTTP请求给Web服务器,请求的内容包括请求的类型(GET/POST等)、地址、头部信息、可能还包括cookie等相关信息。 4. 服务器处理请求:Web服务器收到请求后,会根据请求内容进行处理。处理过程可能包括调取数据库、运行后台程序等动作。 5. 服务器响应:Web服务器根据请求的内容,返回一个HTTP响应给浏览器。响应的内容包括状态码、响应头部、实际的网页内容等。 6. 下载页面资源:浏览器接收到服务器返回的响应后,会开始下载网页的资源,如HTML、CSS、JavaScript、图片等。浏览器会根据响应头部中的Content-Type确定如何解析资源。 7. 页面渲染:当所有的资源下载完成后,浏览器会根据HTML结构、CSS样式,解析并渲染出网页。浏览器会从上到下解析HTML文档,解析过程包括构建DOM树、计算CSS样式、布局页面等。 8. JavaScript执行:在渲染过程中,浏览器会遇到JavaScript代码。浏览器会逐行解析执行JavaScript代码,并根据代码修改DOM树和样式,可能还会触发网络请求等。 9. 页面展示:当页面渲染和JavaScript执行完成后,页面便可以完整地展示给用户了。用户可以看到页面内容,与页面进行交互。 以上仅是一个大致的过程,实际上还有很多细节和额外的步骤,比如缓存机制、重定向、Cookie处理等等。不同的浏览器、服务器也可能会有些许差异。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值