提交一个表单,页面直接弹出一大段英文:HTTP Status 400 – Bad Request。看着吓人,其实它是最直白的一个错误码,翻译过来就是服务器嫌你的请求不合格,根本不想处理。
400 到底代表什么
HTTP 状态码 4 开头表示客户端出错。400 比 401、403、404 更靠前,意思是请求本身格式有问题,服务器没法解析:可能是 URL 里有非法字符、请求体不是合法 JSON、必填头缺失,或者参数类型不对。服务器往往会在返回里附带一句具体描述,别忽略那段文字。
最常见的三种触发
- URL 带特殊字符:中文、空格、& 没做编码,直接拼在地址里,服务器解析就崩。
- 请求体格式错:声明了 JSON 格式,实际传的却是表单编码,或者 JSON 少了个括号。
- Header 超限:Cookie 或自定义头太长被网关截断,也会回 400。
怎么定位问题
curl -v -X POST 接口地址 -H 头信息 -d 数据
浏览器按 F12 开 Network,看发起的新请求用 curl -v 把完整的请求头和请求体打出来,逐行对照接口文档。浏览器里按 F12 开 Network,触发一次出错的请求,看 Payload 和 Request Headers 到底发了什么,很多时候一眼就能看出多了个空格或多层转义。
代理和服务端的偶发 400
有时候代码没动,突然一批请求报 400,多半是中间层干的。Nginx 的 client_header_buffer_size 太小、Tomcat 的 maxHttpHeaderSize 默认 8KB、CDN 对异常 User-Agent 的拦截,都会伪造出 400。这时候跟后端代码无关,看网关日志更快。
- 判断提醒:400 一定是请求侧的问题,别去重启后端服务。先拿统一的 curl 命令复现,再用浏览器对比,两边的差异就是元凶。