400错误排查需依次检查URL格式、请求头、请求体、Cookie与令牌、代理网关五方面:确保URL无非法字符并正确编码;请求头无拼写错误、重复或超长字段;请求体结构合法且类型匹配;Cookie和令牌格式合规;代理网关配置未拦截合法请求。

一、检查URL格式与特殊字符
URL中包含未编码的空格、中文字符、控制字符或非法符号(如{、}、|、^等)会导致服务器拒绝解析。浏览器通常会自动编码部分字符,但手动拼接的URL或API调用中容易遗漏。
1、确认URL中没有裸露的空格,将空格替换为%20或使用encodeURIComponent()处理。
2、检查是否存在未转义的斜杠(/)、问号(?)、井号(#)等分隔符,确保它们仅用于标准位置。
3、若请求来自JavaScript,使用encodeURI()或encodeURIComponent()对完整URL或参数值进行编码。
二、验证HTTP请求头字段
请求头中存在格式错误、重复字段、超长值或不支持的字段名(如自定义头含下划线或空格),可能触发400响应。某些服务器(如Nginx、Cloudflare)对Header长度和命名有严格限制。
1、使用浏览器开发者工具(Network标签页)查看请求Headers,确认User-Agent、Content-Type、Authorization等字段无拼写错误。
2、移除所有自定义请求头,仅保留必要字段,逐步添加以定位问题头。
3、检查Content-Type是否与实际请求体匹配,例如发送JSON时必须设置为application/json,且值中不含多余空格或BOM字符。
三、校验请求体数据结构
POST、PUT等请求的body内容若不符合服务端预期的格式(如JSON语法错误、XML未闭合、表单字段缺失必填项),服务器将直接返回400。常见于前端未做序列化或后端校验失败。
1、若发送JSON,用在线JSON校验工具(如jsonlint.com)验证字符串是否合法,确保引号为英文双引号、逗号不冗余、括号成对闭合。
2、若为application/x-www-form-urlencoded,确认键值对使用&连接,键和值均经URL编码,且无未配对的等号或&。
3、检查是否意外发送了undefined、null或NaN作为字段值,某些后端框架会因类型不匹配而拒绝整个请求。
四、审查Cookie与认证令牌
Cookie字段过长、包含非法字符(如换行、制表符)、或认证令牌(如JWT)格式损坏(签名无效、头部载荷非Base64Url安全编码、缺少必要段),均可能导致400错误。
1、在开发者工具Application → Cookies中查看当前域名下的Cookie列表,删除异常或过期的条目。
2、若使用Bearer Token,复制Authorization头的值,在jwt.io等平台解码并验证三段结构是否完整、Header和Payload是否为有效JSON。
3、确认Cookie中的value未包含未经编码的分号、逗号或空格,这些字符会破坏Cookie解析规则。
五、排查代理与网关中间件干扰
CDN、反向代理(如Nginx、Apache)、WAF(如Cloudflare、阿里云WAF)可能在转发前对请求做预检。若配置了严格的请求大小限制、HTTP版本要求或字段白名单,非法请求会被拦截并返回400。
1、临时绕过CDN或代理,直接访问源站IP+端口(需确保防火墙允许),验证是否仍返回400。
2、检查Nginx配置中client_header_buffer_size、large_client_header_buffers、underscores_in_headers等指令是否限制了请求头处理能力。
3、若使用Cloudflare,进入Dashboard → Rules → HTTP Request Settings,确认无误启用的“Transform Rules”或“Firewall Rules”未主动拒绝请求。









