⚡ 30 秒速记
- 请求先经过策略、缓存与连接选择
- 域名解析给地址,传输连接负责送达
HTTPS还要验证身份并保护传输- 响应可能重定向、命中缓存或触发后续资源请求
HTTP/3用QUIC,连接可复用
一次网络请求是在合适的连接上,把请求交给目标服务,再把响应带回来。 浏览器会先考虑缓存和已有连接,需要时才解析域名并建立安全连接。响应到达后检查状态、类型和访问规则,页面还可能继续发现图片、脚本等资源。网络等待不等于服务端计算时间,定位时要拆开解析、建连、响应和下载,也要确认协议与连接复用情况。
版本校准: 原理文章中的代码代表特定实现与写作时间。应用到当前项目时,应先确认浏览器、框架或工具的主版本,再区分稳定的规范语义、可变化的内部实现和项目自身约束。
当我们去面试的时候,常常会被问到一个问题:在浏览器里面输入 url,按下回车键,会发生什么?
这个问题涉及浏览器中的运行机制和页面加载流程,并且这些内容也都穿插在我们日常开发中,包括前后端联调、对网页进行性能优化等。
今天我会先跟你聊一聊浏览器中网络请求是怎么进行的,这样你对整个网页渲染会有个更好的认识。
# 页面的请求过程
当我们打开某个网站的页面,浏览器就会发起网络请求获取该页面的资源,我们也可以从控制台看到以下的请求信息:

在 Network 面板里,我们能看到所有浏览器发起的网络请求,包括页面、图片、CSS 文件、XHR 请求等,还能看到请求的状态(200 成功、404 找不到、缓存、重定向等等)、耗时、请求头和内容、返回头和内容等
图中第一个就是网站页面的请求,返回<html>页面。
接下来,浏览器会加载页面,同时页面中涉及的外部资源也会根据需要,在特定的时机触发请求下载,包括我们看到的 PNG 图片、JavaScript 文件(这里没有 CSS 样式,是因为样式被直出在<html>页面内容里了)。
回到前面的问题,实际上当我们在浏览器输入网页地址,按下回车键后,浏览器的处理过程如下:
- DNS 域名解析(此处涉及 DNS 的寻址过程),找到网页的存放服务器;
- 浏览器与服务器建立 TCP 连接;
- 浏览器发起 HTTP 请求;
- 服务器响应 HTTP 请求,返回该页面的 HTML 内容;
- 浏览器解析 HTML 代码,并请求 HTML 代码中的资源(如 JavaScript、CSS、图片等,此处可能涉及 HTTP 缓存);
- 浏览器对页面进行渲染呈现给用户(此处涉及浏览器的渲染原理)。
# DNS 解析
DNS 的全称是 Domain Name System,又称域名系统,它负责把www.qq.com这样的域名地址翻译成一个 IP(比如14.18.180.206),而客户端与服务器建立 TCP 连接需要通过 IP 通信
让客户端和服务器连接并不是靠域名进行,在网络中每个终端之间实现连接和通信是通过一个唯一的 IP 地址来完成。在建立 TCP 连接前,我们需要找到建立连接的服务器,DNS 的解析过程可以让用户通过域名找到存放文件的服务器。