首页/网络/协议速查/422 Unprocessable Content 无法处理内容
HTTP 方法与状态码91 条

422 Unprocessable Content 无法处理内容

请求格式正确但内容语义有误(如校验失败、引用不存在);常被 API 用作表单字段校验错误。

协议速查网络更新于 2026-10-13

422 是什么

422 Unprocessable Content 表示「请求读得懂,但内容语义上无法处理」:格式合法、语法没问题,可是字段校验不过、引用的资源不存在,或业务规则不满足。它最早由 WebDAV 定义为 Unprocessable Entity(RFC 4918),后被 RFC 9110 纳入并改名为 Unprocessable Content。REST 接口普遍把它当表单校验错误的标准返回码。

基本信息

名称与状态码422 Unprocessable Content
语义语法正确但语义有误,无法处理
规范RFC 9110 §15.5.21(历史定义见 RFC 4918 §11.2)
与 400 的分工400 管读不懂语法,422 管读懂了但不合理
响应体惯例逐字段列出校验失败原因
常见框架FastAPI、Django REST、Rails、Laravel 均有内置支持

典型使用场景

  • 表单字段校验失败:邮箱格式错误、手机号位数不对、必填项缺失
  • 业务规则不满足:库存不足、余额不够、状态机不允许该操作
  • 引用的关联资源不存在:提交的订单号、用户 ID 查不到
  • 内容语义冲突:日期区间起止颠倒、金额为负这类逻辑错误
  • 让前端能按字段粒度提示用户,而不是丢一个笼统的 400

校验错误响应示例

校验错误响应示例
# 提交一个格式不合法的邮箱
curl -si -X POST https://api.example.com/users \
  -H 'Content-Type: application/json' \
  -d '{"email":"not-an-email","age":-3}'

# 服务端返回 422 并逐字段说明
# HTTP/1.1 422 Unprocessable Content
# {"errors":{"email":"invalid format","age":"must be positive"}}

4xx 语义分工

状态码含义判定依据
400 Bad Request请求语法错误,根本读不懂JSON 解析失败、参数类型错
401 Unauthorized缺少或无效的凭证没有 Token 或已过期
403 Forbidden凭证有效但无权限角色不具备该操作权限
404 Not Found资源不存在路径或 ID 查不到
409 Conflict与当前资源状态冲突并发写入、唯一键重复
422语法正确但语义有误字段校验、业务规则不通过
团队内要先约定 400 与 422 的边界,前端才能统一处理:常见约定是「JSON 结构错误 → 400,字段值不合法 → 422」,并在响应体里固定一个 errors 字段名承载字段级信息。
把服务端自身故障(数据库连不上、下游超时)也返回 422,会让监控统计与归因彻底失真——这类问题属于 5xx,422 只能表达「请求方的内容有问题」。

易错点

  • 把 422 用在服务端依赖不可用的场景,归因混乱:那类问题应返回 5xx
  • 返回 422 却不说明是哪个字段出错,前端只能弹出笼统提示,用户无法自行修正
  • 校验错误信息直接回显用户输入且不做转义,可能形成反射型 XSS
  • 把 422 与 409 混用:并发冲突和唯一键重复属于状态冲突,用 409 更准确,前端处理策略也不同

数据来源与参考

  • RFC 9110 §15.5.21 422
  • RFC 4918 §11.2(历史定义)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌