HTTP 状态吗 400 VS 422

这里记录下 HTTP 状态码 400 与 422 区别。

规范

400 写入了 HTTP/1.1 规范(RFC 2616),422 是在 WebDAV(基于Web的分布式编写和版本控制) 引入的扩展,只有当服务端支持 WebDAV 扩展时,才能选择向客户端返回 422。而一旦支持 422 意味着也应该支持该扩展定义的其他状态码。

区别

HTTP/1.1 规范能够描述足够多的情况,但仍然不够完备。

400 主要是明显的客户端错误以至于服务端不能理解请求从而导致无法处理,包括请求语法格式错误,请求实体过大、欺骗性路由等。

422 则表现为请求格式错误,但出现了语义错误,以至于服务端无法响应。可以理解为服务端能理解请求资源类型 content-type,否则应该返回 415(Unsupported Media Type),也能理解请求实体内容,否则应该返回 400(Bad Request)。

Case

通过访问 https://source.unsplash.com/random/640x320 我们能获取指定尺寸的随机图片,当指定宽度或高度为 0 时,服务端返回了 422,可以理解为高度或宽度为0的图片在“语义”上不构成一个平面图形。

结论

如果服务端支持 WebDAV 扩展,可以在某些场合使用 422 代替 400,否则使用 400 也是没问题的。

参考

Table of Contents