HTTP 协议详解
HTTP 请求方法
HTTP/1.1 定义了 8 种请求方法,每种方法具有特定的语义:
| 方法 |
幂等性 |
缓存 |
请求体 |
响应体 |
用途 |
| GET |
✓ |
✓ |
✗ |
✓ |
获取资源 |
| POST |
✗ |
✗ |
✓ |
✓ |
提交数据 |
| PUT |
✓ |
✗ |
✓ |
✓ |
替换资源 |
| DELETE |
✓ |
✗ |
✗ |
✓ |
删除资源 |
| HEAD |
✓ |
✓ |
✗ |
✗ |
获取元信息 |
| OPTIONS |
✓ |
✗ |
✗ |
✓ |
查询选项 |
| PATCH |
✗ |
✗ |
✓ |
✓ |
部分更新 |
| TRACE |
✓ |
✗ |
✗ |
✓ |
追踪请求 |
状态码分类
1xx - 信息响应
1 2
| 100 Continue - 继续发送请求体 101 Switching Protocols - 协议切换
|
2xx - 成功
1 2 3 4
| 200 OK - 请求成功 201 Created - 资源已创建 204 No Content - 无内容 206 Partial Content - 部分内容
|
3xx - 重定向
1 2 3 4
| 301 Moved Permanently - 永久重定向 302 Found - 临时重定向 304 Not Modified - 未修改 307 Temporary Redirect - 临时重定向
|
4xx - 客户端错误
1 2 3 4 5
| 400 Bad Request - 请求格式错误 401 Unauthorized - 需要认证 403 Forbidden - 禁止访问 404 Not Found - 资源不存在 429 Too Many Requests - 请求过于频繁
|
5xx - 服务器错误
1 2 3 4
| 500 Internal Server Error - 服务器内部错误 502 Bad Gateway - 网关错误 503 Service Unavailable - 服务不可用 504 Gateway Timeout - 网关超时
|
HTTP 缓存机制
强缓存 (Cache-Control)
1 2 3
| HTTP/1.1 200 OK Cache-Control: max-age=3600, public Expires: Wed, 25 Mar 2026 11:20:00 GMT
|
浏览器直接使用本地缓存,不发送请求。
协商缓存
使用 ETag:
1 2 3 4 5 6 7 8 9 10
| # 第一次请求 HTTP/1.1 200 OK ETag: "abc123"
GET /resource HTTP/1.1 If-None-Match: "abc123"
HTTP/1.1 304 Not Modified
|
使用 Last-Modified:
1 2 3 4 5 6 7 8 9 10
| # 第一次请求 HTTP/1.1 200 OK Last-Modified: Tue, 24 Mar 2026 10:00:00 GMT
GET /resource HTTP/1.1 If-Modified-Since: Tue, 24 Mar 2026 10:00:00 GMT
HTTP/1.1 304 Not Modified
|
HTTP/2 对比 HTTP/1.1
| 特性 |
HTTP/1.1 |
HTTP/2 |
改进 |
| 连接管理 |
Keep-Alive |
多路复用 |
性能提升 30-50% |
| 头部压缩 |
✗ |
✓ (HPACK) |
减少开销 |
| 服务器推送 |
✗ |
✓ |
预加载资源 |
| 请求优先级 |
✗ |
✓ |
智能调度 |
| 二进制分帧 |
✗ |
✓ |
效率提升 |
性能优化建议
1. 启用 Gzip 压缩
1 2 3
| gzip on; gzip_types text/plain text/css application/json application/javascript; gzip_min_length 1000;
|
2. 合理设置 Cache-Control
1 2 3 4 5
| # 静态资源 - 长期缓存 Cache-Control: public, max-age=31536000
# 动态内容 - 短期缓存或不缓存 Cache-Control: no-cache, max-age=0
|
3. CDN 部署
4. 减少请求数
- CSS 文件合并
- 图片精灵图
- 内联小资源
- 异步加载非关键资源
安全性头部
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| # 防止 Clickjacking X-Frame-Options: SAMEORIGIN
# 防止 MIME 嗅探 X-Content-Type-Options: nosniff
# 启用 XSS 过滤 X-XSS-Protection: 1; mode=block
# CSP 策略 Content-Security-Policy: default-src 'self'
# HTTPS 强制 Strict-Transport-Security: max-age=31536000; includeSubDomains
|
更新于: 2026-03-22
难度: 高级
阅读时间: 12-15 分钟
相关主题: HTTP/3, QUIC, gRPC