输入url后发生了什么事情

发布于:2025-02-11 ⋅ 阅读:(13) ⋅ 点赞:(0)

当在浏览器的地址栏中输入 URL 并按下回车键后,会经历一系列复杂的过程,以下从 DNS 解析、TCP 连接、HTTP 请求、服务器处理请求、HTTP 响应、浏览器解析渲染页面几个方面详细介绍:

1. DNS 解析

  • 概念:URL 中通常使用的是域名(如 www.example.com),而计算机网络中通信需要使用 IP 地址,因此需要将域名转换为对应的 IP 地址,这个过程就是 DNS 解析。
  • 解析过程
    • 浏览器缓存:浏览器首先会检查自身的 DNS 缓存,看是否已经有该域名对应的 IP 地址。如果有且未过期,就直接使用该 IP 地址。
    • 系统缓存:如果浏览器缓存中没有找到,浏览器会检查操作系统的 DNS 缓存(如在 Windows 系统中,可以通过 ipconfig /displaydns 命令查看)。
    • 本地 DNS 服务器:若系统缓存中也没有,浏览器会向本地 DNS 服务器(通常由网络服务提供商配置)发送 DNS 查询请求。本地 DNS 服务器会先检查自己的缓存,如果有对应的记录,就直接返回 IP 地址;如果没有,会继续向其他 DNS 服务器查询。
    • 根 DNS 服务器、顶级域名 DNS 服务器、权威 DNS 服务器:本地 DNS 服务器会依次向根 DNS 服务器、顶级域名 DNS 服务器和权威 DNS 服务器查询,最终获取到域名对应的 IP 地址,并将其返回给浏览器。

2. TCP 连接

  • 概念:在获取到服务器的 IP 地址后,浏览器会通过 TCP 协议与服务器建立连接。TCP 是一种面向连接的、可靠的传输协议,它可以确保数据在传输过程中不会丢失、乱序。
  • 连接过程:使用三次握手建立 TCP 连接。
    • 客户端发送 SYN 包:客户端向服务器发送一个 SYN 包,包含客户端的初始序列号(ISN),表示请求建立连接。
    • 服务器发送 SYN + ACK 包:服务器收到 SYN 包后,向客户端发送一个 SYN + ACK 包,包含服务器的初始序列号和对客户端 SYN 包的确认号。
    • 客户端发送 ACK 包:客户端收到 SYN + ACK 包后,向服务器发送一个 ACK 包,表示确认连接建立。

3. HTTP 请求

  • 概念:TCP 连接建立后,浏览器会根据 URL 中的信息构建 HTTP 请求消息,并发送给服务器。
  • 请求消息结构:HTTP 请求消息由请求行、请求头和请求体组成。
    • 请求行:包含请求方法(如 GET、POST 等)、请求的资源路径和 HTTP 协议版本。例如:GET /index.html HTTP/1.1
    • 请求头:包含一系列的键值对,用于传递请求的附加信息,如用户代理、请求的内容类型、缓存控制等。例如:User - Agent: Mozilla/5.0
    • 请求体:对于一些需要提交数据的请求(如 POST 请求),请求体中会包含要提交的数据。

4. 服务器处理请求

  • 接收请求:服务器接收到浏览器发送的 HTTP 请求消息后,会对请求进行解析,提取请求行、请求头和请求体中的信息。
  • 处理请求:服务器根据请求的内容,调用相应的应用程序或服务来处理请求。例如,如果请求的是一个静态 HTML 文件,服务器会直接从文件系统中读取该文件;如果请求的是一个动态资源,服务器会调用相应的脚本或程序进行处理。
  • 生成响应:服务器处理完请求后,会生成一个 HTTP 响应消息。

5. HTTP 响应

  • 响应消息结构:HTTP 响应消息由状态行、响应头和响应体组成。
    • 状态行:包含 HTTP 协议版本、状态码和状态描述。例如:HTTP/1.1 200 OK,其中 200 表示请求成功。
    • 响应头:包含一系列的键值对,用于传递响应的附加信息,如响应的内容类型、缓存控制、服务器信息等。例如:Content - Type: text/html
    • 响应体:包含服务器返回给客户端的数据,如 HTML 页面、JSON 数据等。

6. 浏览器解析渲染页面

  • 解析 HTML:浏览器接收到服务器的 HTTP 响应后,会首先解析 HTML 文件,构建 DOM(文档对象模型)树。
  • 解析 CSS:在解析 HTML 的过程中,如果遇到 CSS 链接,浏览器会请求并解析 CSS 文件,构建 CSSOM(CSS 对象模型)树。
  • 合并渲染树:将 DOM 树和 CSSOM 树合并成渲染树,渲染树只包含需要显示的节点及其样式信息。
  • 布局:根据渲染树中节点的样式信息,计算每个节点在页面中的位置和大小。
  • 绘制:将布局好的节点绘制到屏幕上,最终显示出页面。

7. TCP 连接关闭

  • 关闭过程:当浏览器完成页面的渲染后,会通过四次挥手关闭与服务器的 TCP 连接。
    • 客户端发送 FIN 包:客户端向服务器发送一个 FIN 包,表示请求关闭连接。
    • 服务器发送 ACK 包:服务器收到 FIN 包后,向客户端发送一个 ACK 包,表示确认收到关闭请求。
    • 服务器发送 FIN 包:服务器处理完剩余的数据后,向客户端发送一个 FIN 包,表示请求关闭连接。
    • 客户端发送 ACK 包:客户端收到 FIN 包后,向服务器发送一个 ACK 包,表示确认收到关闭请求,至此 TCP 连接关闭。