从输入url到页面返回的全过程

本文详细解析了从输入URL到页面完全加载的全过程,包括浏览器如何解析域名、通过DNS查找IP地址、建立TCP连接以及使用HTTP协议获取并展示网页内容。

在比较全面的学习了计算机网络之后,我们可以来谈一谈生活中经常遇到的一个比较经典的问题,就是描述一下从输入url到页面返回的全过程。

1.      我们输入一个域名:www.baidu.com,然后点击确认;

2.      浏览器查找域名的IP地址。查找过程如下:

首先是浏览器缓存,浏览器会缓存DNS记录一段时间;

如果在浏览器缓存里没有找到需要的记录,浏览器会做一个系统调用,获取系统缓存中的记录;

然后是路由器缓存,路由器一般会有自己的缓存;

如果前者都没有找到,就需要从本地域名服务器开始进行DNS查询了。详细的DNS查询过程我在DNS工作原理及过程中讲到过。

3.      现在浏览器找到了域名的IP地址,则需要向Web服务器建立TCP连接,然后发送HTTP请求了。TCP连接过程我在TCP中讲到过,具体的请求过程我在HTTP中讲到过。

 

好吧,我们结合DNS、TCP和HTTP来详细地说一下输入url到页面返回的全过程吧。

1.      我们输入一个域名:www.baidu.com  

2.      浏览器查找浏览器缓存,如果有域名的IP地址则返回,如果没有继续查找;

3.      系统查找系统缓存,如果有域名的IP地址则返回,如果没有继续查找;

4.      路由器查找路由器缓存,如果有域名的IP地址则返回,如果没有继续查找;

5.      本地域名服务器采用迭代查询,它先向一个根域名服务器查询;

6.      根域名服务器告诉本地域名服务器,下一次应查询的顶级域名服务器dns.com的IP地址;

7.      本地域名服务器向顶级域名服务器dns.com进行查询;

8.      顶级域名服务器dns.com告诉本地域名服务器,下一次应查询的权限域名服务器dns.baidu.com的IP地址;

9.      本地域名服务器向权限域名服务器dns.baidu.com进行查询;

10.  权限域名服务器dns.baidu.com告诉本地域名服务器,所查询的主机www.baidu.com的IP地址;

11.  本地域名服务器最后把查询结果告诉主机;

12.  主机浏览器获取到Web服务器的IP地址后,与服务器建立TCP连接;

13.  浏览器所在的客户机向服务器发出连接请求报文;

14.  服务器接收报文后,同意建立连接,向客户机发出确认报文;

15.  客户机接收到确认报文后,再次向服务器发出报文,确认已接收到确认报文;

16.  此处客户机与服务器之间的TCP连接建立完成,开始通信;

17.  浏览器发出取文件命令:GET;

18.  服务器给出响应,将指定文件发送给浏览器;

19.  浏览器释放TCP连接;

20.  浏览器所在主机向服务器发出连接释放报文,然后停止发送数据;

21.  服务器接收到释放报文后发出确认报文,然后将服务器上未传送完的数据发送完;

22.  服务器数据传输完毕后,向客户机发送连接释放报文;

23.  客户机接收到报文后,发出确认,然后等待一段时间后,释放TCP连接;

24.  浏览器显示页面中所有文本。

 

以上就是从输入url到页面返回的全部详细过程了。

在用户输入 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、付费专栏及课程。

余额充值