全链路 7 大步骤
| # | 关键节点 | 细说可延伸内容 |
|---|---|---|
| 1 | 地址栏解析 | URL 组成、浏览器缓存、Service-Worker 拦截、HSTS 强升 HTTPS |
| 2 | DNS 解析 | 递归/迭代、根/TLD/权威、DoH/DoT、DNS Cache、edns-client-subnet |
| 3 | 建立连接 | TCP 三次握手、TLS 1.3/QUIC 0-RTT、SYN 丢包/重传、SYN Cookies |
| 4 | 发送请求 | HTTP 1.x/2/3、请求⽅法、请求头、长连接&队头阻塞、代理链 |
| 5 | 服务器响应 | CDN 缓存、负载均衡、状态码、压缩、Cookie/Set-Cookie、ETag |
| 6 | 浏览器渲染 | HTML Parser、CSSOM、JS 执行、Layout→Paint→Composite、CLS/LCP |
| 7 | 关闭连接 | TCP 四次挥手、TIME_WAIT、Keep-Alive、HTTP/2 复⽤无需挥手 |
从敲 URL 到页面显示分 7 步: 第一步 URL 解析,拆成协议、域名、参数等; 第二步 DNS 解析,查本地缓存后递归 + 迭代查全球 DNS,拿到服务器 IP; 第三步建连接,TCP 三次握手(HTTPS 加 TLS 四次握手); 第四步发 HTTP 请求,传请求行、请求头(如 Host、Cookie); 第五步服务器处理,Nginx 转发、应用服务器跑业务、数据库查数据,生成响应; 第六步收响应,解析状态行和响应体; 第七步页面渲染,解析 HTML 成 DOM、CSS 成 CSSOM,合并成渲染树,再布局、绘制、合成显示到屏幕。 核心是‘定位→传数据→渲染’,每个环节都要保证可靠,比如 TCP 三次握手避免无效连接,TLS 确保数据安全,渲染时 JS 会阻塞 DOM 解析,这些细节都会影响页面加载速度。
当我们在浏览器键入一个网址时,浏览器会先对我们输入的url进行解析,如www.baidu.com,浏览器会解析出我们使用的协议(http)和我们需要访问的服务器(www.baidu.com),知道协议之后,我们需要在应用层对数据进行第一层封装,加入http请求头。
之后会在我们的浏览器,操作系统和host文件中查询DNS缓存看看是否可以查到服务器的ip地址,如果查到了,就进入传输层,如果没有继续在我们的本地DNS服务器中查询,首先询问根服务器(.),然后根服务器会返回顶级域服务器(.com),然后顶级域服务器返回权威服务器(.baidu.com),然后因为www.baidu.com属于权威服务器,那么这个权威服务器就会返回需要访问的服务器的ip地址,然后记录到本地DNS服务器中,数据传入传输层.
在进入传输层后,需要根据MSS的长度对数据划分,划分后我们会给每一块数据添加一个tcp头,然后进入网络层交给ip模块
进入网络层后,根据我们之前获得的信息为数据加上ip报文,然后根据ARP协议找到对应ip地址的MAC地址,封装上MAC头后交给网卡传输数据流,传输到对应服务器后,服务器根据收到的http请求封装相应的数据返回给我们的浏览器,然后浏览器根据返回的数据进行渲染,这样我们的页面就会出现在屏幕上