输入URL后的加载过程

本文深入解析从输入URL到页面加载完成的过程,涵盖DNS解析、TCP三次握手与四次挥手、HTTP请求响应及网页构建渲染等关键步骤,揭示浏览器与服务器间的数据传输机制。

输入url后的加载过程

从输入 URL 到页面加载完成的过程中都发生了什么

计算机网络体系结构

  • 应用层(HTTP、SMTP、FTP、POP3)
  • 运输层(TCP、UDP)
  • 网络层(IP(路由器))
  • 数据链路层(网桥(CSMA/CD、PPP))
  • 物理层(集线器)

1. 查找域名对应IP地址

这一步包括 DNS 具体的查找过程,包括:浏览器缓存->系统缓存->路由器缓存...
(1) 浏览器搜索自己的 DNS 缓存(维护一张域名与 IP 地址的对应表);
(2) 搜索操作系统中的 DNS 缓存(维护一张域名与 IP 地址的对应表);
(3) 搜索操作系统的 hosts 文件( Windows 环境下,维护一张域名与 IP 地址的对应表);
(4) 操作系统将域名发送至 LDNS(本地区域名服务器),LDNS 查询 自己的 DNS 缓存(一般查找成功率在 80% 左右),查找成功则返回结果,失败则发起一个迭代 DNS 解析请求

① LDNS 向 Root Name Server (根域名服务器,如 com、net、org等的解析的顶级域名服务器的地址)发起请求,此处,Root Name Server 返回 com 域的顶级域名服务器的地址;

② LDNS 向 com 域的顶级域名服务器发起请求,返回 baidu.com 域名服务器地址;

③ LDNS 向 baidu.com 域名服务器发起请求,得到 www.baidu.com 的 IP 地址;

(5) LDNS 将得到的 IP 地址返回给操作系统,同时自己也将 IP 地址缓存起来;

(6) 操作系统将 IP 地址返回给浏览器,同时自己也将 IP 地址缓存起来;

2. 建立连接(TCP的三次握手)

(1) 主机向服务器发送一个建立连接的请求;

(2) 服务器接到请求后发送同意连接的信号;

(3) 主机接到同意连接的信号后,再次向服务器发送了确认信号 ;

注意:这里的三次握手中主机两次向服务器发送确认,第二次是为了防止已失效的连接请求报文段传至服务器导致错误。

3. 构建网页

(1) 浏览器根据 URL 内容生成 HTTP 请求,请求中包含请求文件的位置、请求文件的方式等等;

(2) 服务器接到请求后,会根据 HTTP 请求中的内容来决定如何获取相应的 HTML 文件;

(3) 服务器将得到的 HTML 文件发送给浏览器;

(4) 在浏览器还没有完全接收 HTML 文件时便开始渲染、显示网页;

(5) 在执行 HTML 中代码时,根据需要,浏览器会继续请求图片、音频、视频、CSS、JS等文件,过程同请求 HTML ;

浏览器渲染展示网页过程

  1. HTML代码转化为DOM(DOM Tree)
  2. CSS代码转化成CSSOM(CSS Object Model)
  3. 结合DOM和CSSOM,生成一棵渲染树(包含每个节点的视觉信息)(Render Tree)
  4. 生成布局(layout),即将所有渲染树的所有节点进行平面合成
  5. 将布局绘制(paint)在屏幕上

4. 断开连接(TCP的四次挥手)

(1) 主机向服务器发送一个断开连接的请求;

(2) 服务器接到请求后发送确认收到请求的信号;(此时服务器可能还有数据要发送至主机)

(3) 服务器向主机发送断开通知;(此时服务器确认没有要向主机发送的数据)

(4) 主机接到断开通知后断开连接并反馈一个确认信号,服务器收到确认信号后断开连接;

注意:这里的四次挥手中服务器两次向主机发送消息,第一次是回复主机已收到断开的请求,第二次是向主机确认是否断开,确保数据传输完毕。

三次握手 && 四次挥手



作者:WangChloe
链接:https://www.jianshu.com/p/3944732228f0
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

在用户输入 URL页面加载完成的整个过程中,涉及多个层次的技术细节,包括网络通信、浏览器解析与渲染、资源加载等多个阶段。以下是整个流程的详细解析: ### 1. 用户输入 URL 用户在浏览器地址栏输入一个 URL(例如 `https://www.example.com`),浏览器会首先解析该 URL,提取出协议(如 HTTPS)、主机名(如 `www.example.com`)、路径(如 `/index.html`)等信息。 ### 2. DNS 解析 浏览器需要将域名解析为对应的 IP 地址。此过程通常包括以下步骤: - **本地 DNS 缓存查询**:浏览器首先检查自身的 DNS 缓存,看是否已经缓存了该域名的 IP 地址。 - **操作系统 DNS 缓存查询**:如果浏览器缓存中没有,则查询操作系统级别的 DNS 缓存。 - **向 DNS 服务器发起请求**:如果缓存中没有,则操作系统会向配置的 DNS 服务器发起查询请求,获取目标服务器的 IP 地址[^1]。 ### 3. 建立 TCP 连接 在获得服务器 IP 地址后,浏览器会通过 TCP 协议与服务器建立连接。通常使用 **三次握手** 机制完成连接建立: 1. 客户端发送 SYN 报文。 2. 服务器回应 SYN-ACK。 3. 客户端发送 ACK 确认。 若使用 HTTPS 协议,还需在此基础上进行 TLS 握手,协商加密密钥[^1]。 ### 4. 发送 HTTP 请求 建立连接后,浏览器发送 HTTP 请求报文。请求报文通常包含请求方法(如 GET)、请求路径、HTTP 协议版本、请求头(Headers)等信息。例如: ```http GET /index.html HTTP/1.1 Host: www.example.com User-Agent: Mozilla/5.0 Accept: text/html,application/xhtml+xml Accept-Encoding: gzip, deflate Connection: keep-alive ``` ### 5. 服务器处理请求并返回响应 服务器接收到请求后,根据请求内容生成响应。响应报文包括状态码(如 200 表示成功)、响应头(Headers)和响应体(Body)。例如: ```http HTTP/1.1 200 OK Content-Type: text/html Content-Length: 1234 Date: Mon, 01 Jan 2024 00:00:00 GMT <!DOCTYPE html> <html> <head>...</head> <body>...</body> </html> ``` ### 6. 浏览器解析与渲染 浏览器接收到响应后,开始解析 HTML 文档,并逐步构建 DOM 树和 CSSOM 树,最终生成渲染树。在此过程中: - **HTML 解析器** 会解析 HTML 标签,并构建 DOM 树。 - **CSS 解析器** 会解析样式表,构建 CSSOM 树。 - **JavaScript 执行** 可能会修改 DOM 和 CSSOM,影响渲染流程。 - **渲染引擎** 会根据渲染树计算布局(Layout),绘制页面内容(Paint),并最终将页面呈现在用户面前[^2]。 ### 7. 加载其他资源 HTML 文档中通常包含对其他资源的引用,如图片、CSS、JavaScript 文件等。浏览器会根据这些引用再次发起 HTTP 请求,加载这些资源,并重复解析、渲染流程,直到所有资源加载完成。 ### 8. 断开 TCP 连接 当所有数据交换完成后,浏览器与服务器之间的 TCP 连接可以通过 **四次挥手** 断开连接: 1. 客户端发送 FIN 报文。 2. 服务器回应 ACK。 3. 服务器发送 FIN 报文。 4. 客户端回应 ACK。 若使用 HTTP/1.1 的 `keep-alive` 机制,连接可能保持一段时间以复用[^2]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值