🌐 浏览器输入 URL 到页面显示全过程
超高频过程题:DNS 解析 → TCP 握手 → TLS 握手 → HTTP 请求 → 浏览器渲染,五阶段讲透。
五阶段总览
阶段一:URL 解析 & DNS 查询
🔗 解析 URL
浏览器先解析 URL,提取协议(HTTP/HTTPS)、域名、端口、路径。
🧭 DNS 多级缓存查询
① 浏览器缓存 → ② 操作系统缓存 → ③ hosts 文件 → ④ 本地 DNS 服务器(递归)
本地 DNS 再逐级查:根域名服务器 → TLD 服务器 → 权威 DNS。
最终返回域名的 IP 地址。
阶段二、三:TCP 握手 + TLS 握手
🤝 TCP 三次握手
拿到 IP 后,建立 TCP 连接:
SYN → SYN+ACK → ACK(约 1.5 RTT)。
(就是前面学过的三次握手)
🔐 TLS 握手(仅 HTTPS)
HTTPS 比 HTTP 多了 TLS 握手(约 2-RTT 额外延迟):
ClientHello → ServerHello+证书 → 证书验证+密钥协商 → Finished。
HTTP/2 多路复用可减少连接开销。
阶段四:HTTP 请求与响应
📨 构造并发送请求
浏览器构造 HTTP 请求:GET /path HTTP/1.1 + Host + Headers。
服务器处理请求,返回响应:200 OK + 页面内容,或 304 Not Modified(走缓存)。
⚡ 资源加载
返回的 HTML 里还引用了 CSS、JS、图片等外部资源,浏览器会发起新的 HTTP 请求逐个加载。
HTTP/2 多路复用可并行传输,加快加载。
阶段五:浏览器渲染
高频追问
DNS 用 TCP 还是 UDP
标准查询用 UDP 53;区域传输用 TCP。
DNS 解析失败
尝试 hosts 文件、检查网络连接。
大概多少步
约 7-8 个大阶段,面试时分层(DNS→TCP→TLS→HTTP→渲染)回答最清晰。
从浏览器输入 URL 到页面显示分五阶段:① URL 解析 + DNS 多级缓存查询(浏览器→OS→hosts→本地DNS→根/TLD/权威);② TCP 三次握手;③ TLS 握手(HTTPS 才有,额外 2-RTT);④ HTTP 请求响应(200/304);⑤ 浏览器渲染(HTML→DOM、CSS→CSSOM、合并 Render Tree、Layout、Paint)。面试分层回答最清晰。
我分五个阶段讲。第一 URL 解析和 DNS 查询,浏览器解析出协议、域名、端口、路径,然后查 DNS,从浏览器缓存到操作系统缓存到 hosts 再到本地 DNS 服务器,本地 DNS 递归查根服务器、TLD 服务器、权威服务器拿到 IP。第二 TCP 三次握手建立连接。第三如果是 HTTPS 还有 TLS 握手,验证证书、协商密钥。第四浏览器构造 HTTP 请求,服务器返回 200 或 304。第五浏览器渲染,解析 HTML 生成 DOM 树、解析 CSS 生成 CSSOM、合并成渲染树、算布局、最后绘制到屏幕。
DNS 是多级缓存的。先查浏览器缓存,再查操作系统缓存和 hosts 文件,都没命中就发给本地 DNS 服务器做递归查询。本地 DNS 服务器再迭代查:先问根域名服务器知道不知道,根服务器指引它去问 TLD 服务器比如 .com 服务器,TLD 再指引去问权威 DNS 服务器,权威服务器才真正存着这个域名对应的 IP,返回给本地 DNS,再返回给浏览器。
浏览器拿到 HTML 后,先解析 HTML 构建 DOM 树,同时解析 CSS 构建 CSSOM 树,然后把两者合并成渲染树 Render Tree,接着做布局 Layout 也叫回流,计算每个元素的位置和大小,最后是绘制 Paint 把像素画到屏幕上。过程中遇到外部资源比如 JS、CSS、图片会发新的 HTTP 请求,渲染过程也可能多次回流和重绘。