HTTP 状态码与响应头:完全参考指南
对于 Web 开发人员、SEO 专家和系统管理员来说,理解 HTTP 状态码和响应头是至关重要的基础知识。本参考指南涵盖了现代 Web 通信中最常用的状态码和头部信息。
1. HTTP 状态码快速查阅
状态码根据首位数字分为五类。
1xx: 信息性状态码
- 101 Switching Protocols: 服务器同意切换协议(例如升级到 WebSocket)。
2xx: 成功状态码
- 200 OK: 请求成功。
- 201 Created: 请求成功且服务器创建了新的资源。
- 204 No Content: 请求成功,但没有返回内容。
3xx: 重定向状态码
- 301 Moved Permanently: 资源已永久移动到新 URL。
- 302 Found: 资源临时移动到新 URL。
- 304 Not Modified: 用于缓存;表示资源自上次请求以来未被修改。
4xx: 客户端错误状态码
- 400 Bad Request: 语义有误,服务器无法处理该请求。
- 401 Unauthorized: 需要身份验证。
- 403 Forbidden: 服务器理解请求,但拒绝执行。
- 404 Not Found: 找不到请求的资源。
- 429 Too Many Requests: 客户端发送请求频次过高(速率限制)。
5xx: 服务器错误状态码
- 500 Internal Server Error: 服务器遇到意外情况,无法完成请求。
- 502 Bad Gateway: 网关或代理服务器从上游服务器接收到无效响应。
- 503 Service Unavailable: 服务器当前无法处理请求(如维护或超载)。
- 504 Gateway Timeout: 网关或代理服务器未能及时从上游服务器接收响应。
2. 核心 HTTP 响应头
响应头提供了关于响应或服务器的元数据。
缓存控制: Cache-Control
控制浏览器和中间缓存(如 CDN)如何存储资源。
public, max-age=31536000, immutable: 适用于带版本的静态资源(JS, CSS)。no-store: 不缓存任何内容(适用于敏感数据)。no-cache: 使用缓存前必须先向服务器确认资源是否更新。
安全: Strict-Transport-Security (HSTS)
强制浏览器仅通过 HTTPS 访问站点。
- 示例:
max-age=63072000; includeSubDomains; preload
会话管理: Set-Cookie
从服务器发送 cookie 到客户端。
- 示例:
id=abc; Max-Age=3600; Secure; HttpOnly; SameSite=Lax- HttpOnly: 防止 JavaScript 访问 cookie(缓解 XSS 攻击)。
- Secure: 仅通过 HTTPS 发送 cookie。
- SameSite: 控制跨站 cookie 行为(Lax, Strict 或 None)。
内容协商: Content-Type 与 Accept-Encoding
- Content-Type: 指明资源的媒体类型(如
text/html,application/json)。 - Accept-Encoding: 客户端告知服务器支持的压缩格式(如
gzip,br)。
3. 对比表: 301 与 302 重定向
| 特性 | 301 永久重定向 | 302 临时重定向 |
|---|---|---|
| SEO 影响 | 传递权重 (PageRank) | 不传递权重 |
| 浏览器缓存 | 默认会被缓存 | 默认不被缓存 |
| 使用场景 | 网站迁移、URL 永久更名 | 维护期间、临时促销活动 |
FAQ: 常见 HTTP 问题
问: 为什么我登录后还是遇到 403 Forbidden 错误?
答: 这通常是因为用户缺乏访问该资源所需的特定权限/角色,或者 CSRF 校验失败。
问: 401 和 403 有什么区别?
答: 401 Unauthorized 意味着“我不确定你是谁”(请登录)。403 Forbidden 意味着“我知道你是谁,但你没权限访问这里”。
问: 如何修复 502 Bad Gateway?
答: 这通常是服务器端问题。检查后端应用(如 Node.js, Python)是否在运行,或反向代理(Nginx/Apache)配置是否正确指向了后端。
相关工具
- HTTP 头部解析器: 检查和分析任何 URL 的响应头。
- Cache-Control 生成器: 为您的资源生成优化的缓存策略。
- 状态码检查工具: 验证 API 或网站的响应代码。