一、HTTP 协议概述:从 0.9 到 3,它到底变了什么?
大家好,我是你们这趟抓包之旅的向导。今天咱们先不急着抓包,得先把 HTTP 这个老伙计的底细摸清楚。你想想看,每天浏览器里刷新的页面、手机里刷的朋友圈,背后都是它在干活。但你真的了解它吗?
我个人习惯,学任何协议之前,先看它的「简历」——怎么来的、现在在哪儿、核心脾气是什么。搞懂这三样,后面抓包分析时你才能一眼看穿问题本质。
1.1 HTTP 发展史:四个版本,四次进化
HTTP 从诞生到现在,经历了四个主要版本。每个版本都解决了一类核心痛点。我当年刚入行时还在用 HTTP/1.1,后来亲眼看着 HTTP/2 普及,再到现在的 HTTP/3,感触挺深的。
| 版本 | 诞生年份 | 核心特点 | 典型问题 |
|---|---|---|---|
| HTTP/0.9 | 1991 | 只有 GET 方法,纯文本传输 | 只能传 HTML,无头无状态 |
| HTTP/1.0 | 1996 | 引入 Header、状态码、多种方法 | 每个请求新建 TCP 连接 |
| HTTP/1.1 | 1997 | 持久连接、管道化、分块传输 | 队头阻塞 |
| HTTP/2 | 2015 | 二进制分帧、多路复用、头部压缩 | TCP 层面的队头阻塞 |
| HTTP/3 | 2022 | 基于 QUIC(UDP),彻底解决队头阻塞 | 部署复杂度高 |
关键转折点:HTTP/1.1 是目前使用最广泛的版本,但 HTTP/2 和 HTTP/3 正在快速普及。抓包时你会发现,很多现代网站已经默认使用 HTTP/2 了。
我记得有一次排查一个页面加载慢的问题,抓包一看,好家伙,几十个请求全在串行排队。那就是典型的 HTTP/1.1 队头阻塞。后来升级到 HTTP/2,加载时间直接砍半。嗯,这就是版本进化的力量。
1.2 HTTP 在 OSI 模型中的位置
搞网络的人都知道 OSI 七层模型,但说实话,实际干活时我们更常用 TCP/IP 四层模型。HTTP 在哪儿?它在最顶层——应用层。
我画了一张图,帮你把位置理清楚:
抓包小贴士:当你用 Wireshark 抓包时,看到的是从网络接口层到应用层的完整数据。但如果你用 Chrome DevTools 抓包,它只展示应用层的 HTTP 请求和响应。两种工具各有用途,后面章节我会细讲。
说白了,HTTP 是「住」在应用层的房客,TCP 是它的运输公司。HTTP 把数据打包好,交给 TCP 去送。但 HTTP/3 换了个运输公司——它直接用 UDP 了,因为 TCP 有时候太死板,遇到丢包就卡住不动。
1.3 HTTP 的核心特性:无状态、无连接、媒体独立
这三个特性是 HTTP 的「身份证」。搞懂它们,你才能理解为什么 HTTP 要搞 Cookie、为什么要有 Keep-Alive、为什么能传图片和视频。
1.3.1 无状态
什么叫无状态?就是 HTTP 协议不记得你。每次请求都是全新的,服务器不知道你之前干过什么。
举个例子:你登录了淘宝,然后点击「我的订单」。按理说服务器应该知道你已经登录了,对吧?但 HTTP 协议本身不提供这个记忆能力。那怎么办?靠 Cookie 和 Session。服务器把登录状态写进 Cookie,浏览器每次请求带上它,服务器才能「想起来」你是谁。
避坑指南:我曾经排查过一个诡异的 Bug——用户登录后偶尔会跳回登录页。抓包一看,发现是 Cookie 被浏览器拦截了。因为那个请求跨域了,而服务器没配正确的 SameSite 属性。嗯,无状态特性本身没问题,但依赖 Cookie 做状态管理时,坑特别多。
1.3.2 无连接
HTTP/1.0 时代,每次请求都要新建一个 TCP 连接,请求完就断开。这就像你每次去便利店买东西,都要重新走一遍从家到店的路。效率极低。
HTTP/1.1 引入了持久连接(Keep-Alive),允许在一个 TCP 连接上发送多个请求。但注意,它只是「允许复用连接」,本质上 HTTP 还是无连接的——连接的管理是 TCP 的事,HTTP 只管发请求、收响应。
你想想看,为什么要有这个特性?因为早期互联网页面简单,一个页面就一个请求,断开就断开了。现在一个页面动辄上百个请求,如果还搞无连接,那加载速度简直不敢想。
1.3.3 媒体独立
HTTP 不关心你传的是什么。HTML、CSS、JS、图片、视频、JSON、XML……只要你能用 MIME 类型描述清楚,HTTP 就能传。
这个特性太重要了。我刚开始做 Web 开发时,以为 HTTP 只能传 HTML。后来发现 Content-Type 这个头字段才是关键。你设 Content-Type: image/png,浏览器就知道这是张图片;设 Content-Type: application/json,前端就知道该用 JSON 解析。
核心要点:媒体独立让 HTTP 成为了互联网的「通用传输协议」。它不挑食,什么数据都能吃。这也是为什么 RESTful API 都基于 HTTP——因为它天然支持任意格式的数据交换。
1.4 本章小结
好,咱们捋一下这章的核心内容:
- HTTP 发展史:从 0.9 到 3,核心是解决性能问题。HTTP/1.1 是经典,HTTP/2 是主流,HTTP/3 是未来。
- OSI 位置:HTTP 在应用层,依赖传输层(TCP/UDP)提供可靠传输。
- 三大特性:无状态(靠 Cookie 弥补)、无连接(靠 Keep-Alive 优化)、媒体独立(靠 Content-Type 区分)。
这些概念是后面所有抓包分析的基础。你如果现在觉得有点抽象,没关系,等我们开始抓包时,你会亲眼看到这些特性在数据包里的具体表现。那才是真正「看懂」HTTP 的开始。