Axios POST请求在请求体为null时返回400错误(Invalid Content-Length header)
Axios POST请求在请求体为null时返回400错误(Invalid Content-Length header)
我之前也碰到过类似的问题,这大概率是因为Axios对null请求体的处理逻辑和服务器的期望不匹配导致的。当你把请求体设为null时,Axios可能会错误地生成或设置Content-Length请求头,而服务器无法识别这种情况,就返回了400错误。
这里有几个可行的解决方案,你可以根据自己的场景选择:
用
undefined代替null作为请求体
Axios对undefined的处理和null不同,传入undefined时,Axios会明白你不需要发送请求体,从而正确处理请求头:const requestBody = undefined; const configParams = { "params": { "type": "food", "is_checked": false }, "responseType": "json" }; axios.post(url, requestBody, configParams);直接省略请求体参数
如果确实不需要请求体,你可以直接把配置对象作为第二个参数传入,跳过请求体的位置:const configParams = { "params": { "type": "food", "is_checked": false }, "responseType": "json" }; axios.post(url, configParams);手动设置
Content-Length头为0
有些服务器期望POST请求即使没有内容,也要明确设置Content-Length: 0,你可以在配置里手动添加这个头:const requestBody = null; const configParams = { "params": { "type": "food", "is_checked": false }, "responseType": "json", headers: { 'Content-Length': 0 } }; axios.post(url, requestBody, configParams);
你可以先试试前两种方案,一般都能解决问题,因为它们让Axios更准确地处理“无请求体”的POST请求,避免生成服务器无法识别的Content-Length头。
内容来源于stack exchange




