访问网页的全过程(知识串联)
约 1489 字大约 5 分钟
网页浏览的全过程
1. 输入 URL 开始访问
在浏览器中输入一个 URL(例如 https://www.example.com
)并按下回车键后,浏览器会启动一系列的步骤来请求并加载网页内容。
2. DNS 查询:域名解析
DNS 解析
URL 中的 www.example.com
是一个域名,它必须被转换为 IP 地址才能与目标服务器建立连接。这个过程由 DNS(Domain Name System) 完成。DNS 负责将域名转换为实际的 IP 地址,以便计算机能找到对应的服务器。
- 本地缓存:浏览器首先查看本地缓存是否有该域名的 IP 地址。
- DNS 查询:如果没有缓存,浏览器向本地 DNS 服务器发起查询请求。
- 递归查询:如果本地 DNS 服务器无法解析,查询会递归到更高级别的 DNS 服务器,直到找到权威 DNS 服务器获取正确的 IP 地址。
3. HTTP/HTTPS 请求:建立连接并发送请求
使用 HTTP 或 HTTPS 协议
通过 DNS 查询得到目标服务器的 IP 地址后,浏览器决定使用 HTTP 或 HTTPS 协议与服务器建立连接并请求资源。
- HTTP(Hypertext Transfer Protocol)是一种无状态的、用于客户端与服务器之间传输超文本的协议。
- HTTPS 是 HTTP 的加密版本,采用 SSL/TLS 加密协议保障数据传输的安全性,确保数据的机密性和完整性。
4. TCP 连接:三次握手建立连接
浏览器和服务器之间使用 TCP 协议(传输层协议)来建立可靠的连接。TCP 协议通过三次握手(Three-Way Handshake)完成:
- SYN:浏览器向服务器发送一个 SYN 数据包,表示请求建立连接。
- SYN-ACK:服务器回应一个 SYN-ACK 数据包,表示接受建立连接的请求。
- ACK:浏览器发送 ACK 数据包,连接建立完成,双方可以开始传输数据。
5. 发送 HTTP 请求
在 TCP 连接建立后,浏览器向服务器发送一个 HTTP 请求报文,其中包含请求方法、请求头、请求体等信息:
- 请求方法(如
GET
或POST
):请求的操作类型。 - 请求头部:包含用户代理信息、Cookie、缓存控制等。
- 请求体(仅
POST
请求有):包含要提交的数据。
例如:
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
6. 服务器响应:返回 HTML 内容
服务器收到浏览器的 HTTP 请求后,处理请求并返回一个 HTTP 响应报文,内容通常包括:
- 响应状态码:如
200 OK
表示请求成功,404 Not Found
表示资源未找到。 - 响应头部:如内容类型、缓存控制等信息。
- 响应体:实际的网页内容(如 HTML、CSS、JavaScript)。
例如:
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 1024
<!DOCTYPE html>
<html>...</html>
7. 浏览器渲染:解析并显示网页
- 解析 HTML:浏览器将收到的 HTML 代码解析成 DOM(Document Object Model)树。
- 解析 CSS:浏览器加载并解析 CSS 文件,构建 CSSOM(CSS Object Model)树。
- 合成渲染树:浏览器将 DOM 树与 CSSOM 树结合,生成合成渲染树。
- 布局与绘制:浏览器根据合成树计算每个元素的尺寸和位置,绘制到屏幕上。
同时,浏览器会根据 HTML 中对外部资源(如图片、CSS 文件、JavaScript 文件等)的引用,发起额外的 HTTP 请求加载这些资源。
8. 资源加载:图片、CSS、JS 等
- 在解析 HTML 时,浏览器会发现并请求网页上的其他资源,如图片、外部 CSS 和 JavaScript 文件。每一个资源都会发起独立的 HTTP 请求,可能是通过并行的多个连接来加速加载过程。
例如:
GET /styles.css HTTP/1.1
GET /image.png HTTP/1.1
GET /script.js HTTP/1.1
- 这些资源加载完后,浏览器会继续解析并应用它们,可能会修改 DOM 或更新页面样式,进一步更新渲染。
9. TCP 连接的关闭:四次挥手
网页加载完成后,浏览器会关闭与服务器之间的 TCP 连接。这个过程称为四次挥手:
- 客户端发送 FIN:浏览器发送 FIN 数据包,表示它已经完成数据传输。
- 服务器回应 ACK:服务器确认接收到 FIN 包。
- 服务器发送 FIN:服务器也发送 FIN 包,表示它准备关闭连接。
- 客户端回应 ACK:浏览器确认接收到服务器的 FIN 包,连接关闭。
网络层与物理层:路由与转发
在上面的过程中,我们主要关注的是应用层、传输层和网络层,但实际上,数据包在 网络层 和 物理层 上进行路由和传输:
- 网络层(IP 层):负责 路由和转发,即决定数据包的传输路径,并将其发送到正确的目的地。路由器根据目标 IP 地址来选择最佳路径。
- 物理层:负责通过电缆、光纤等传输媒介,将数据包以电信号或光信号的形式传输。
总结
访问网页的过程涉及到多个层次的协作,从应用层的 DNS 查询到传输层的 TCP 连接,再到网络层的路由转发,最终通过物理层的传输将数据送达目标。每一个环节都涉及不同的协议与技术,其中包含了很多计算机网络的知识点,掌握这些知识对于网络调优、故障排查和技术实现都大有裨益。
- 应用层:URL 解析、DNS 查询、HTTP 请求与响应。
- 传输层:TCP 三次握手与四次挥手、可靠数据传输。
- 网络层:路由与转发、BGP、IP 地址。
- 物理层:数据传输的实际介质和设备。