你点一下网页链接,或者在搜索框里敲下“天气预报”,几秒后结果就出来了。这背后可不是魔法,而是一连串有条不紊的底层动作——就像快递从下单到敲门,中间要过仓库、分拣、装车、派送一样。
第一步:域名得先“翻译”成地址
浏览器不认识“www.baidu.com”这种名字,它只认数字地址,比如 180.101.49.12。这个“翻译”过程叫 DNS 查询。你可以把它理解成查电话簿:浏览器先问本地缓存有没有记过这个网站的号码;没有,就去问路由器;再没有,就一路往上找运营商 DNS、根 DNS,直到拿到 IP 地址。
第二步:和服务器“约个见面”
拿到 IP 后,浏览器要跟服务器建立连接。用的是 TCP 协议,靠三次握手来确认双方都在线、能收能发:
客户端 → 服务器:SYN(我想连你)
服务器 → 客户端:SYN-ACK(好,我准备好了)
客户端 → 服务器:ACK(收到,那咱开始吧)这个过程通常不到 100 毫秒,但如果你在地铁里刷网页总卡顿,很可能就是某一次握手被信号抖动拖住了。
第三步:真正发请求——HTTP 报文长啥样?
连接建好,浏览器才把请求内容打包发过去。最常见的是 GET 请求,比如访问知乎首页:
GET / HTTP/1.1
Host: www.zhihu.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Accept: text/html,application/xhtml+xml
Connection: keep-alive这段看着像纯文本,但它就是真实发出去的字节流。服务器收到后解析头部,知道你要的是 HTML 页面,再从磁盘或内存里找出对应资源,拼好响应发回来:
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 12487
<!DOCTYPE html><html><head>...</head><body>...</body></html>第四步:浏览器不是“收件员”,是“装修队”
响应回来的 HTML 只是蓝图。浏览器一边下载,一边解析:遇到 <link rel="stylesheet"> 就去拉 CSS,看到 <script src="xxx.js"> 就暂停渲染去加载 JS(除非加了 async 或 defer)。图片、字体、接口数据(比如用户头像)全得另起请求,一个页面背后可能藏着十几二十个并发请求。
顺手说一句:HTTPS 不是“加密版 HTTP”,而是“HTTP + TLS 加壳”
现在几乎全是 HTTPS。它并不是改了 HTTP 协议本身,而是在 TCP 连接之上,先跑一遍 TLS 握手(验证证书、协商密钥),之后所有 HTTP 数据都用这个密钥加密传输。你在地址栏看到的小锁图标,其实是这一整套加密通道建立成功的标志。
下次网页加载慢,别急着关掉重开。打开开发者工具(F12),切到 Network 标签页,点一下刷新,你会看到每个请求的时间轴:DNS 查多久、连接花几毫秒、等待服务器处理(TTFB)占大头,还是下载资源拖了后腿——这些数字背后,全是刚才说的那些步骤在真实运转。