HTTP/HTTPS 协议基础:一次请求到底经历了什么

"在浏览器输入一个网址,回车之后发生了什么?"——这道经典面试题其实是理解 Web 的最佳线索。这篇笔记按时间顺序把整条链路串一遍。

一、DNS 解析:域名变 IP

浏览器先查本地缓存,没有再查操作系统缓存,还没有就发起 DNS 查询,经过递归解析最终拿到域名对应的 IP 地址。可以用 dig www.example.com 直观看到解析过程。

二、TCP 三次握手:建立连接

拿到 IP 后,浏览器与服务器建立 TCP 连接:

  1. 客户端发 SYN:在吗?
  2. 服务器回 SYN+ACK:在,你准备好了吗?
  3. 客户端回 ACK:准备好了,开始聊吧。

三次握手确保双方都具备收发能力。两次不够——服务器无法确认客户端的接收能力。

三、TLS 握手:HTTPS 的加密协商

如果是 HTTPS,TCP 之上还要进行 TLS 握手,核心是:

TLS 的精妙之处:用慢但安全的非对称加密来交换密钥,用快但密钥易泄露的对称加密来传数据,取长补短。

四、HTTP 请求与响应

连接就绪,浏览器发出 HTTP 请求。一个请求包含请求行、请求头、请求体;响应则包含状态行、响应头、响应体。常见状态码:

五、浏览器渲染

收到 HTML 后,浏览器解析 DOM、加载 CSS 构建渲染树、布局、绘制,期间遇到 JS 会阻塞解析(所以现代实践是 defer 或把脚本放底部)。

六、小结

DNS → TCP → TLS → HTTP → 渲染,这条链路每一个环节都值得深挖。学完这一遍再去看 Nginx 配置,很多指令忽然就知道是干什么的了——基础知识真的会让上层知识"自动解锁"。