跳转至

HTTP 消息参考

HTTP 消息承载请求或响应。消息结构、状态码和方法语义是三个不同概念: 方法描述请求意图,状态码描述响应结果,消息头和消息体承载元数据与表示。

消息结构

部分 请求 响应
起始行 方法、请求目标、HTTP 版本 HTTP 版本、状态码、原因短语
头字段 主机、内容协商、认证、缓存条件等 内容类型、缓存策略、认证挑战等
空行 分隔头字段与消息体 分隔头字段与消息体
消息体 可选的提交内容 可选的资源表示或错误说明

HTTP/1.1 文本示意:

GET /articles/42 HTTP/1.1
Host: example.com
Accept: text/html
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Cache-Control: max-age=300
Content-Length: 15

<h1>示例</h1>

HTTP/2 和 HTTP/3 在线路上不使用上述文本起始行,但方法、状态与字段语义基本延续。 原因短语不是机器判断依据,在 HTTP/2 和 HTTP/3 中也不再使用。

常见请求头

字段 作用 注意事项
Host 指定目标主机和可选端口 HTTP/1.1 请求必需,代理需防 Host 混淆
Accept 客户端可接受的媒体类型 服务端可据此内容协商
Accept-Language 自然语言偏好 偏好提示,不是身份或地区证明
Authorization 提交认证凭据 只经 HTTPS,限制日志和转发
Content-Type 请求体的媒体类型 必须与实际序列化格式一致
Content-Length 消息体字节长度 由客户端库或服务器正确生成
Cookie 向源发送 Cookie 状态修改需考虑 CSRF
If-None-Match 携带缓存实体标签 未变化时可返回 304
Origin 请求来源 可用于 CORS 和部分 CSRF 检查
Referer 来源页面 URL 可能受 Referrer-Policy 限制

常见响应头

字段 作用 注意事项
Content-Type 响应表示的媒体类型和可选字符集 HTML 推荐 text/html; charset=utf-8
Content-Length 响应体字节长度 与字符数不同
Cache-Control 缓存许可、期限与重验证要求 敏感响应常需 no-store
ETag 表示版本标识 配合条件请求和 304
Location 重定向目标或新资源位置 常见于 201、3xx
Set-Cookie 设置 Cookie 考虑 Secure、HttpOnly、SameSite
WWW-Authenticate 发起认证挑战 常与 401 同用
Vary 指明影响响应选择的请求头 影响共享缓存键
Content-Security-Policy 限制页面资源和脚本执行 属于纵深防护,不替代输出编码

状态码分类

范围 类别 含义
1xx 信息 请求处理中或协议切换
2xx 成功 请求已成功接收、理解或处理
3xx 重定向 需跳转或使用缓存表示
4xx 客户端错误 请求无效、未认证、无权限或资源不存在
5xx 服务器错误 服务器处理有效请求时失败

常用状态码

状态码 名称 典型语义
200 OK 请求成功并返回表示
201 Created 创建成功,常通过 Location 指向新资源
204 No Content 成功但无响应体
206 Partial Content 返回范围请求的部分内容
301 / 308 Permanent Redirect 永久重定向;308 明确保留原方法和请求体
302 Found 临时重定向;历史客户端可能把 POST 改为 GET
303 See Other 使用 GET 获取 Location 指向的另一资源
307 Temporary Redirect 临时重定向并保留原方法和请求体
304 Not Modified 缓存表示仍有效,不包含普通响应体
400 Bad Request 语法、格式或参数无效
401 Unauthorized 实际表示“未认证或认证失败”,通常带挑战
403 Forbidden 身份可能已知,但没有执行该操作的授权
404 Not Found 资源不存在,或为避免泄露而隐藏存在性
405 Method Not Allowed 资源不允许该方法,应返回 Allow
409 Conflict 与资源当前状态冲突
412 Precondition Failed 条件请求前置条件不满足
415 Unsupported Media Type 请求体媒体类型不受支持
429 Too Many Requests 请求过多,可附 Retry-After
500 Internal Server Error 未分类服务器错误
502 / 503 / 504 网关或可用性错误 上游错误、暂不可用或超时

认证、授权与缓存

  • 认证回答“你是谁”,授权回答“你能否对这个对象执行该操作”;两者必须在服务端分别检查。
  • 401 主要表示需要认证,403 主要表示认证后仍不允许;名称 Unauthorized 容易误导。
  • HTTPS 保护传输,不替代会话管理、对象级授权、CSRF 防护和输入验证。
  • 缓存策略必须考虑用户身份、Cookie、Authorization、Vary 和敏感数据。
  • no-cache 表示使用前通常要重验证;no-store 表示不应存储,两者并不相同。
  • 方法是否可缓存由规范、响应指令和缓存实现共同决定,不能只凭状态码判断。

方法语义详见 HTTP 方法,完整检查见质量检查。