当在浏览器地址栏输入一个网址(如 https://www.example.com)并按下 Enter 后,背后会发生一系列复杂的操作。整个过程可以分为以下几个关键步骤:
1. URL 解析
用户输入的网址(URL, Uniform Resource Locator)通常包含以下部分:
https://www.example.com:443/path/page.html?query=123#section1
各部分解析:
- 协议(Scheme):
https://指定了通信协议(HTTPS)。 - 主机名(Host):
www.example.com需要解析成 IP 地址。 - 端口号(Port):HTTPS 默认端口是
443,HTTP 默认端口是80。 - 路径(Path):
/path/page.html指定了服务器上的资源路径。 - 查询参数(Query):
?query=123传递额外数据给服务器。 - 片段标识符(Fragment):
#section1仅在前端使用,不会发送给服务器。
2. DNS 解析(域名解析)
浏览器需要将域名(www.example.com)转换成 IP 地址(如 192.168.1.1)。DNS 解析过程如下:
- 浏览器缓存:先检查是否已有该域名的 IP 地址缓存。
- 操作系统缓存:如果浏览器没有缓存,则查询操作系统的 DNS 缓存。
- 本地 Hosts 文件:系统会检查
hosts文件(如C:\Windows\System32\drivers\etc\hosts)。 - 本地 DNS 服务器(ISP 提供的):
- 若缓存无匹配,则查询本地 DNS 服务器。
- 若本地 DNS 没有缓存,它会向 根 DNS 服务器 查询。
- 根 DNS 服务器 → 顶级域(TLD)服务器(如
.com) → 权威 DNS 服务器 逐级解析。 - 返回 IP 地址,浏览器可以使用这个 IP 访问服务器。
3. 建立 TCP 连接(三次握手)
获得 IP 地址后,浏览器与服务器建立 TCP 连接:
- 客户端 → 服务器发送 SYN 请求。
- 服务器 → 客户端返回 SYN-ACK。
- 客户端 → 服务器发送 ACK,连接建立。
4. 发送 HTTPS 请求
由于是 HTTPS,浏览器会先与服务器建立 TLS/SSL 加密通道(TLS 握手):
- 客户端 发送
ClientHello(支持的加密算法、随机数)。 - 服务器 发送
ServerHello(选择的加密算法、服务器证书)。 - 客户端 验证证书,生成会话密钥,并加密发送给服务器。
- 服务器 解密密钥,双方使用对称加密进行安全通信。
之后,浏览器发送 HTTP 请求:
GET /path/page.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html
5. 服务器处理请求
服务器收到请求后:
- 检查 防火墙 和 权限控制,确保允许访问。
- 后端处理:
- 静态资源:如 HTML、CSS、JS 直接返回。
- 动态资源(如 PHP、Python、Node.js):服务器运行代码,查询数据库,生成 HTML 响应。
- 数据库查询:
- 若请求需要数据(如查询用户信息),服务器查询数据库(MySQL, PostgreSQL)。
- 生成 HTTP 响应:
并附上 HTML 文件。HTTP/1.1 200 OK Content-Type: text/html Content-Length: 1024
6. 浏览器接收响应
浏览器收到服务器的响应后:
- 检查状态码:
200 OK:请求成功。301 Moved Permanently:重定向,浏览器访问新地址。404 Not Found:资源不存在。500 Internal Server Error:服务器错误。
- 解析 HTML:
- HTML 解析器解析 DOM 树。
- 解析
<link>引入的 CSS 文件。 - 解析
<script>执行 JavaScript 代码。
7. 渲染页面
- CSS 解析:
- 根据 CSS 规则计算元素样式。
- JavaScript 执行:
- 若有
document.write()或 AJAX 请求,可能会修改 DOM。
- 若有
- 合成(Compositing):
- 生成布局(Layout)树,计算元素的位置。
- 分层(Layer)合成,优化动画与滚动性能。
- 绘制(Painting):
- GPU 加速渲染页面。
8. 处理后续请求
- 如果 HTML 包含图片、CSS、JS,浏览器会并行发送多个请求:
GET /style.cssGET /script.jsGET /image.jpg
- 浏览器缓存静态资源,加快加载速度。
9. 页面呈现
最终,浏览器完成 HTML、CSS、JS 解析,用户看到完整页面。
10. 关闭连接
- 短连接(默认 HTTP/1.0):服务器处理完请求后关闭 TCP 连接(四次挥手)。
- 长连接(HTTP/1.1+ 默认开启):使用
Keep-Alive复用 TCP 连接,提高性能。
总结
整个过程如下:
- 解析 URL
- DNS 解析,获取服务器 IP
- TCP 三次握手
- TLS/SSL 握手(HTTPS)
- 发送 HTTP 请求
- 服务器处理请求,查询数据库
- 返回 HTTP 响应
- 浏览器解析 HTML、CSS、JS
- 渲染页面
- 加载后续资源
- 页面呈现
- 关闭 TCP 连接(或保持长连接)
这个过程涉及 网络通信、加密、浏览器解析、渲染 等多个领域,是 Web 运行的核心原理。

2958

被折叠的 条评论
为什么被折叠?



