下面给你一份系统、通俗又偏实战的《HTTP 协议详解》,从原理 → 报文 → 方法 → 状态码 → 特性 → HTTP/1.1 vs HTTP/2/3 → 常见问题一步到位,适合你做技术博客 / 面试 / 运维 / Web 开发使用。
一、HTTP 是什么?
HTTP(HyperText Transfer Protocol)
👉 超文本传输协议
👉 用于 客户端(浏览器) 与 服务器 之间通信
👉 属于 应用层协议
📌 本质一句话:
HTTP 是一套“请求—响应”规则
1️⃣ HTTP 的特点
| 特性 | 说明 |
|---|---|
| 无连接 | 每次请求独立(HTTP/1.x) |
| 无状态 | 服务器不保存客户端状态 |
| 明文传输 | HTTP 本身不加密 |
| 基于 TCP | 默认端口 80 |
无状态 → 才有了 Cookie / Session / Token
二、HTTP 工作流程(一次访问发生了什么)
浏览器 → DNS解析 → 建立TCP连接 → 发送HTTP请求
↓
服务器处理
↓
浏览器 ← 接收HTTP响应 ← 返回数据 ←
三、HTTP 报文结构(核心重点)
1️⃣ HTTP 请求报文
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Chrome/120
Accept: text/html
Cookie: uid=123
请求报文 = 4 部分
1️⃣ 请求行
方法 URL 协议版本
2️⃣ 请求头(Headers)
3️⃣ 空行
4️⃣ 请求体(Body)(GET 通常没有)
2️⃣ HTTP 响应报文
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1024
Set-Cookie: uid=123
<html>...</html>
响应报文 = 4 部分
1️⃣ 状态行
协议版本 状态码 状态描述
2️⃣ 响应头
3️⃣ 空行
4️⃣ 响应体
四、HTTP 请求方法(Methods)
| 方法 | 用途 | 是否有 Body |
|---|---|---|
| GET | 查询数据 | ❌ |
| POST | 提交数据 | ✅ |
| PUT | 更新资源 | ✅ |
| DELETE | 删除资源 | ❌ |
| HEAD | 只要响应头 | ❌ |
| OPTIONS | 查询服务器支持方法 | ❌ |
| PATCH | 局部更新 | ✅ |
📌 面试高频
- GET 用于查询
- POST 用于提交
- PUT 全量更新
- PATCH 局部更新
五、HTTP 状态码(必考)
1️⃣ 1xx 信息
| 状态码 | 含义 |
|---|---|
| 100 | 继续 |
2️⃣ 2xx 成功
| 状态码 | 含义 |
|---|---|
| 200 | 成功 |
| 201 | 创建成功 |
| 204 | 成功但无返回 |
3️⃣ 3xx 重定向
| 状态码 | 含义 |
|---|---|
| 301 | 永久重定向 |
| 302 | 临时重定向 |
| 304 | 使用缓存 |
📌 304 = 浏览器缓存命中
4️⃣ 4xx 客户端错误
| 状态码 | 含义 |
|---|---|
| 400 | 请求错误 |
| 401 | 未认证 |
| 403 | 无权限 |
| 404 | 不存在 |
| 429 | 请求过多 |
5️⃣ 5xx 服务器错误
| 状态码 | 含义 |
|---|---|
| 500 | 服务器错误 |
| 502 | 网关错误 |
| 503 | 服务不可用 |
| 504 | 网关超时 |
六、HTTP 常见请求头 & 响应头
1️⃣ 常见请求头
| Header | 作用 |
|---|---|
| Host | 目标主机 |
| User-Agent | 客户端信息 |
| Accept | 接收类型 |
| Authorization | 认证信息 |
| Cookie | 会话信息 |
2️⃣ 常见响应头
| Header | 作用 |
|---|---|
| Content-Type | 返回数据类型 |
| Content-Length | 内容长度 |
| Set-Cookie | 设置 Cookie |
| Cache-Control | 缓存策略 |
| Location | 重定向地址 |
七、HTTP 缓存机制(重点)
1️⃣ 强缓存
Cache-Control: max-age=3600
📌 不向服务器请求,直接用本地缓存
2️⃣ 协商缓存
If-Modified-Since
If-None-Match
服务器返回:
304 Not Modified
八、HTTP 与 HTTPS 的区别(必问)
| 对比项 | HTTP | HTTPS |
|---|---|---|
| 是否加密 | ❌ | ✅ |
| 端口 | 80 | 443 |
| 安全性 | 低 | 高 |
| 性能 | 快 | 稍慢(可忽略) |
📌 HTTPS = HTTP + SSL/TLS
九、HTTP 版本演进
1️⃣ HTTP/1.0
- 短连接
- 每次请求都建连接
2️⃣ HTTP/1.1(主流)
✔ 长连接
✔ 管道化
❌ 队头阻塞
3️⃣ HTTP/2(性能革命)
✔ 多路复用
✔ 头部压缩
✔ 二进制帧
4️⃣ HTTP/3(最新)
✔ 基于 QUIC(UDP)
✔ 0-RTT
✔ 无队头阻塞
十、HTTP 常见面试问题
Q1:HTTP 为什么是无状态?
减轻服务器负担,提高扩展性
Q2:Cookie 和 Session 区别?
| Cookie | Session |
|---|---|
| 客户端 | 服务端 |
| 不安全 | 相对安全 |
| 容量小 | 容量大 |
Q3:GET 和 POST 区别?
| GET | POST |
|---|---|
| URL 传参 | Body 传参 |
| 有长度限制 | 理论无限 |
| 幂等 | 非幂等 |
Q4:什么是幂等?
多次请求,结果一致
十一、适合你的进阶方向(建议)
结合你之前建站 / 运维 / 前端 / 爬虫的内容,推荐你下一步深入:
- 🔹 HTTP 抓包(Wireshark / F12)
- 🔹 RESTful API 设计
- 🔹 Nginx HTTP 模块
- 🔹 HTTP 在爬虫中的反爬策略
- 🔹 HTTP/3 + QUIC 实战