[面试题] 浏览器输入百度的网址后会发生什么?
📖 版块 A:知识讲解版 (温故知新)
这是一道经典的端到端综合面试题,涵盖了网络协议、后端架构及前端渲染的全过程:
- URL 解析与 HSTS 检查:浏览器检查输入是否合法,并查看是否存在 HSTS(HTTP Strict Transport Security)强制跳转 HTTPS 的配置。
- DNS 域名解析:将域名转换为 IP 地址。过程:浏览器缓存 -> 操作系统缓存(Hosts)-> 本地 DNS 服务器(LDNS)-> 根域名服务器 -> 顶级域名服务器 -> 权威 DNS 服务器。
- 建立 TCP 连接(三次握手):在 IP 层寻址完成后,客户端与服务器进行三次握手建立连接,确保双方收发能力正常。
- TLS 安全握手:对于 HTTPS 请求,在 TCP 建立后进行证书验证、密钥交换,确定后续通信的对称加密秘钥。
- 发送 HTTP 请求:浏览器构建请求报文(包含请求行、请求头、Cookie 等)。
- 后端处理与响应:返回 HTTP 响应报文(状态码、HTML/JSON 等)。
- 浏览器渲染预览:解析 HTML 构建 DOM 树 -> 解析 CSS 构建渲染树 -> 布局排版 -> 绘制页面。
- 连接关闭(四次挥手):数据传输完毕后,根据 Keep-Alive 设置决定是否断开 TCP 连接。
🎤 版块 B:面试实战版 (高手逐字稿)
Q:浏览器输入百度的网址后会发生什么?
💬 高手逐字稿:
这是一个非常经典的系统性问题,它完整地体现了请求从客户端到互联网,再到数据中心后端架构的全链路过程。我把它拆解为四个关键阶段。
第一阶段是地址解析。 当我输入网址并回车,浏览器首先会进行域名解析。它会先查浏览器缓存和系统 hosts 文件,如果没有命中,就会向本地 DNS 发起递归查询,直到从权威服务器拿到百度服务器的 IP 地址。如果是 HTTPS 请求,浏览器还会检查 HSTS,看是否需要强制将 HTTP 转为 HTTPS。
第二阶段是连接建立与加密。 拿到 IP 后,浏览器发起 TCP 三次握手来保证连接的可靠性。紧接着是 HTTPS 的 TLS 握手。这一步非常关键,双方会验证数字证书的合法性,并通过非对称加密协商出一个“对称密钥”,保证后续的数据传输不会被监听或篡改。
第三阶段是服务端的处理过程。 百度这种量级的网站,请求首先会到达其接入层的负载均衡器(比如 Nginx 或 LVS)。负载均衡器根据算法将请求转发给后端的微服务网关。网关完成权限校验、限流后再分发给具体的业务微服务。服务内部可能会涉及 Redis 缓存查询、MySQL 数据库读写。最后,后端会返回一个 200 OK 的响应,包含 HTML 源码或数据流。
第四阶段是浏览器渲染。 浏览器收到响应后,会开启渲染线程:解析 HTML 生成 DOM 树,解析 CSS 生成样式表,两者合并后形成渲染树(Render Tree)。在绘图的同时,浏览器还会异步加载图片、JS 等静态资源,并最终完成页面的绘制。
这里其实有个值得关注的细节: 那就是为什么现在的网页打开越来越快?除了带宽提升,主要得益于两个点:一是 DNS 预解析(DNS Prefetching),浏览器在空闲时提前把页面中可能跳到的域名解析好;二是 HTTP/2 或 HTTP/3 的普及,比如 HTTP/2 的多路复用技术,允许在同一个 TCP 连接上并发发送多个请求,解决了以前“队头阻塞”的问题。
通过这一整套流程,百度的主页就完整呈现在用户面前了。