HTTP协议详解
HTTP协议详解
什么是HTTP
HTTP(HyperText Transfer Protocol,超文本传输协议)是Web应用的基础协议,用于客户端和服务器之间的通信。
HTTP请求
请求结构
请求方法 URL 协议版本
请求头字段: 值
...
请求体
请求方法
| 方法 | 说明 | 特点 |
|---|---|---|
| GET | 获取资源 | 幂等,无副作用 |
| POST | 提交数据 | 非幂等 |
| PUT | 更新资源 | 幂等 |
| DELETE | 删除资源 | 幂等 |
| HEAD | 获取响应头 | 不返回响应体 |
| OPTIONS | 查询支持的方法 | CORS预检 |
常见请求头
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html,application/json
Content-Type: application/json
Authorization: Bearer token123
Cache-Control: no-cache
Cookie: session=abc123
HTTP响应
响应结构
协议版本 状态码 状态描述
响应头字段: 值
...
响应体
状态码分类
| 状态码 | 类别 | 说明 |
|---|---|---|
| 1xx | 信息 | 请求已接收,继续处理 |
| 2xx | 成功 | 请求已成功处理 |
| 3xx | 重定向 | 需要额外操作 |
| 4xx | 客户端错误 | 请求有误 |
| 5xx | 服务器错误 | 服务器处理失败 |
常见状态码
| 状态码 | 说明 | 使用场景 |
|---|---|---|
| 200 | 成功 | 请求成功 |
| 201 | 已创建 | 资源创建成功 |
| 301 | 永久重定向 | URL永久变更 |
| 302 | 临时重定向 | URL临时变更 |
| 304 | 未修改 | 使用缓存 |
| 400 | 错误请求 | 参数错误 |
| 401 | 未授权 | 需要认证 |
| 403 | 禁止访问 | 权限不足 |
| 404 | 未找到 | 资源不存在 |
| 500 | 服务器错误 | 服务器异常 |
| 502 | 网关错误 | 上游服务异常 |
| 503 | 服务不可用 | 服务过载或维护 |
HTTP/1.1 vs HTTP/2
HTTP/1.1特点
- 持久连接(Keep-Alive)
- 管线化(但有队头阻塞问题)
- 主机头(Host)
HTTP/2特点
- 二进制分帧
- 多路复用
- 头部压缩
- 服务器推送
HTTPS
HTTPS = HTTP + SSL/TLS,提供加密传输:
客户端 -> 服务器: 请求建立SSL连接
服务器 -> 客户端: 返回证书
客户端: 验证证书,生成随机密钥
客户端 -> 服务器: 用公钥加密的随机密钥
后续通信: 使用对称加密
实践:使用curl测试HTTP
# 发送GET请求
curl https://api.example.com/users
# 发送POST请求
curl -X POST https://api.example.com/users \
-H "Content-Type: application/json" \
-d '{"name": "John", "email": "john@example.com"}'
# 查看响应头
curl -I https://example.com
# 跟随重定向
curl -L https://example.com
# 使用HTTP/2
curl --http2 https://example.com
总结
HTTP是Web运维的基础协议。理解请求响应模型、状态码和各种头部字段,对于诊断Web问题和优化性能至关重要。