HTTP 400 Bad Request
通用的客户端错误:请求本身存在某种问题,服务器不会去猜测具体原因。
HTTP 400 是什么意思
HTTP 400 Bad Request 表示服务器读取了请求,并在做任何实际处理之前就将其判定为无效并拒绝。它是万能的客户端错误:语法错误、参数无效、cookie 损坏,或服务器拒绝处理的请求头。
与 401 或 403 不同,400 与权限无关——请求在到达时就已经是错误的。API 通常会附带一个 JSON 响应体,准确说明具体是哪个字段未通过校验。
400 错误的常见原因
- 请求体中的 JSON 或 XML 格式错误(多余的逗号、引号错误、负载被截断)。
- 缺少或无效的查询参数,或未通过服务器端校验的值。
- 损坏或过大的 cookie——这是大型网站上某个用户持续遇到 400 的典型原因。
- Content-Type 头设置错误,导致服务器按错误的格式解析请求体。
- URL 编码错误:查询字符串中未转义的空格、引号或非 ASCII 字符。
作为用户该如何修复
- 重新加载页面;如果 400 依然存在,请清除该站点的 cookie——损坏的 cookie 是最常见的原因。
- 检查 URL 中是否有拼写错误,或在复制粘贴过程中被破坏的字符。
- 尝试使用隐身窗口,以排除浏览器扩展重写请求的可能性。
作为开发者该如何修复
- 发送前先验证 JSON 负载;记录服务器实际收到的完整请求体。
- 返回一个说明具体哪个字段无效的响应体——一个空的 400 只会浪费大家排查问题的时间。
- 检查服务器对请求头和 cookie 大小的限制(例如 nginx 的 large_client_header_buffers)。
- 如果你的 API 需要区分两者,可用 422 表示格式正确但语义无效的输入。
示例响应
HTTP/1.1 400 Bad Request
Content-Type: application/json
{"error":"validation_failed","field":"email","message":"not a valid address"}常见问题
400 错误是我作为访客的问题吗?
这通常是由过期的 cookie 或损坏的链接引起的,而不是你做错了什么。为该站点清除 cookie 可以解决大多数情况。
400 和 422 有什么区别?
400 表示请求无法解析或结构上无效;422 表示请求解析没有问题,但未通过语义校验。许多 API 对这两种情况都使用 400。
为什么只有一个用户遇到 400,而其他人都正常?
几乎总是因为该用户浏览器中的 cookie 过大或已损坏,超出了服务器的请求头大小限制。