HTTP/HTTPS 协议基础:一次请求到底经历了什么
"在浏览器输入一个网址,回车之后发生了什么?"——这道经典面试题其实是理解 Web 的最佳线索。这篇笔记按时间顺序把整条链路串一遍。
一、DNS 解析:域名变 IP
浏览器先查本地缓存,没有再查操作系统缓存,还没有就发起 DNS 查询,经过递归解析最终拿到域名对应的 IP 地址。可以用 dig www.example.com 直观看到解析过程。
二、TCP 三次握手:建立连接
拿到 IP 后,浏览器与服务器建立 TCP 连接:
- 客户端发 SYN:在吗?
- 服务器回 SYN+ACK:在,你准备好了吗?
- 客户端回 ACK:准备好了,开始聊吧。
三次握手确保双方都具备收发能力。两次不够——服务器无法确认客户端的接收能力。
三、TLS 握手:HTTPS 的加密协商
如果是 HTTPS,TCP 之上还要进行 TLS 握手,核心是:
- 服务器出示证书,客户端验证证书链和有效期;
- 双方通过非对称加密协商出一个对称会话密钥;
- 之后的通信全部用这个会话密钥加密(对称加密快,适合大量数据)。
TLS 的精妙之处:用慢但安全的非对称加密来交换密钥,用快但密钥易泄露的对称加密来传数据,取长补短。
四、HTTP 请求与响应
连接就绪,浏览器发出 HTTP 请求。一个请求包含请求行、请求头、请求体;响应则包含状态行、响应头、响应体。常见状态码:
200成功;301/302重定向;304缓存有效,直接用本地副本;404资源不存在;500服务器内部错误;502/504网关错误,常见于反代后端挂了。
五、浏览器渲染
收到 HTML 后,浏览器解析 DOM、加载 CSS 构建渲染树、布局、绘制,期间遇到 JS 会阻塞解析(所以现代实践是 defer 或把脚本放底部)。
六、小结
DNS → TCP → TLS → HTTP → 渲染,这条链路每一个环节都值得深挖。学完这一遍再去看 Nginx 配置,很多指令忽然就知道是干什么的了——基础知识真的会让上层知识"自动解锁"。