浏览器中输入网址后发生了什么?
本文分步讲解了从浏览器输入网址到页面最终展示的全过程,涵盖DNS解析、TCP连接、HTTP请求和页面渲染等关键环节。
这是一个很常见的计算机网络类面试题,考察候选人对浏览器、操作系统、网络协议、服务器端等各层次的理解。
一个清晰的回答思路是从高层到低层,逐步展开:
当输入 www.baidu.com 并按下回车时,发生了什么?
1. 浏览器处理阶段
用户输入:浏览器地址栏接收到
www.baidu.com。检查输入类型:浏览器会判断这是搜索关键词还是 URL。
浏览器缓存检查:
- 浏览器缓存是否已有对应的 DNS 解析结果(域名 → IP)。
- 浏览器缓存是否已有该资源的 HTTP 缓存(根据缓存策略,如
Expires、Cache-Control)。
2. DNS 解析阶段
如果缓存未命中,浏览器会发起 DNS 查询:
先查操作系统本地缓存(hosts 文件、本地 DNS 缓存)。
若未命中,请求发往本地 DNS 服务器(一般是运营商提供的)。
本地 DNS 若无记录,会递归/迭代查询:
- 根域名服务器
.com顶级域名服务器baidu.com权威域名服务器
最终获得
www.baidu.com对应的 IP 地址。
3. 建立 TCP 连接(三次握手)
拿到 IP 后,浏览器通过 TCP 协议 与目标服务器建立连接:
- 客户端发送
SYN报文。 - 服务器返回
SYN + ACK。 - 客户端回复
ACK。
完成三次握手,连接建立。
4. 建立 TLS/SSL 连接(如果是 HTTPS)
如果是 https://www.baidu.com:
- TLS 握手,协商加密算法、交换证书、公钥验证。
- 建立安全的加密通道。
5. 浏览器发送 HTTP 请求
浏览器构造 HTTP 请求报文,例如:
plaintextGET / HTTP/1.1 Host: www.baidu.com User-Agent: Chrome/… Accept: text/html通过 TCP/TLS 通道发送到服务器。
6. 服务器处理请求
- 服务器接收请求报文。
- Web 服务器(如 Nginx、Apache)进行处理,可能还要与后端应用服务(Java、Python、PHP 等)交互。
- 查询数据库或缓存,准备响应内容。
7. 服务器返回 HTTP 响应
例如:
plaintext
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: ...
随后是网页 HTML 数据。
8. 浏览器渲染页面
- 解析 HTML,构建 DOM 树。
- 解析 CSS,构建 CSSOM 树。
- 合并为 渲染树,计算布局(Layout)。
- 执行 JavaScript,可能会修改 DOM/CSSOM。
- 绘制(Painting),显示在屏幕上。
- 如果 HTML 内有外部资源(图片、CSS、JS),会并行发起新的请求。
9. 用户看到页面
最终,用户在屏幕上看到百度首页。
✅ 总结版一句话回答(适合面试):
当输入 www.baidu.com 并回车时,浏览器会先进行 DNS 解析获取 IP 地址,然后通过 TCP(三次握手)+ TLS(若是 HTTPS)建立连接,发送 HTTP 请求,服务器返回响应数据,浏览器解析并渲染 HTML、CSS、JS,最终将页面呈现给用户。
右滑查看面试常问