HTTP协议简易入门
请求格式、响应格式与通信全流程
HTTP协议规定了客户端与服务器通信的标准格式和流程,下面用最清晰的方式解析核心内容:
🔧 HTTP请求格式(客户端 → 服务器)
POST /api/login HTTP/1.1 → 请求行(方法+路径+协议版本)
Host: www.example.com ↗
User-Agent: Mozilla/5.0 │
Content-Type: application/json ├─ 请求头(键值对元数据)
Authorization: Bearer token123 │
Content-Length: 46 ↘{"username":"john","password":"123"} → 请求体(传输数据)
结构解析:
- 请求行:包含请求方法(
GET/POST/PUT/DELETE
)、资源路径和HTTP版本 - 请求头:每行一个键值对,描述客户端信息/数据格式等(必含
Host
字段) - 请求体:仅
POST/PUT
方法包含,格式由Content-Type
指定(如JSON/表单数据)
📬 HTTP响应格式(服务器 → 客户端)
HTTP/1.1 200 OK → 状态行(协议版本+状态码+描述)
Server: nginx/1.18 ↗
Content-Type: application/json │
Set-Cookie: session=abc123; ├─ 响应头(元数据控制指令)
Cache-Control: max-age=3600 │
Content-Length: 34 ↘{"status":"success","user_id":1001} → 响应体(实际数据)
结构解析:
- 状态行:包含状态码(如200成功/404未找到/500服务器错误)
- 响应头:控制缓存/数据类型/认证信息等(
Content-Type
必须声明数据类型) - 响应体:HTML/JSON/文件二进制等实际传输内容
🚦 通信全流程(以浏览器访问网站为例)
-
TCP连接建立:客户端与服务器通过三次握手建立TCP连接
-
HTTP请求发送:浏览器构建完整HTTP请求(自动添加必要请求头)
-
服务器处理:服务器解析请求→执行业务逻辑→生成响应
-
HTTP响应返回:服务器返回状态码+响应头+响应体
-
资源加载:浏览器解析响应体:
- 遇到
<img>/<script>
标签 → 发起新的HTTP请求获取资源 - 接收到
Set-Cookie
→ 后续请求自动携带Cookie
头
- 遇到
-
连接关闭:默认关闭连接(HTTP/1.1可复用连接)
🛡 关键协议特性
- 无状态性:每次请求独立(需用
Cookie/Session/JWT
维持状态) - 明文传输:HTTPS通过
SSL/TLS
加密解决 - 版本演进:
- HTTP/1.1:持久连接(减少TCP握手)
- HTTP/2:二进制分帧 + 多路复用(解决队头阻塞)
- HTTP/3:基于QUIC协议(UDP实现更快连接)
深度探索推荐:C++学习一站式分享