Next.js调用FastAPI时出现RequestContentLengthMismatchError问题排查
解决RequestContentLengthMismatchError问题
核心问题
你手动设置的Content-Length头存在计算错误:
JSON.stringify()返回的字符串length是字符数,但HTTP协议中Content-Length要求的是字节数(UTF-8编码下,中文、特殊符号等部分字符会占用多个字节),导致实际请求体字节数和头中声明的数值不匹配。- 同时你写错了请求头字段:
Connect应为Connection,这不是当前错误的直接原因,但属于配置失误需要修正。
解决方案
直接移除手动设置的Content-Length头,现代Node.js环境中的fetch会自动计算并设置正确的Content-Length值,同时修正Connection头:
const body = JSON.stringify({ data: value }) const response = await fetch(`${FAST_API_HOST}/api/data`, { method: 'POST', headers: { 'Accept': 'application/json; charset=utf-8', 'Content-Type': 'application/json', 'Connection': 'keep-alive', // 修正头字段名称 }, body }) .then(async res => { if (res.status === 200) return res.json(); else throw new Error(await res.text()) })
额外说明
如果特殊场景下必须手动计算字节数(不推荐),可以用new TextEncoder().encode(body).length获取UTF-8编码后的准确字节长度,但完全没必要——让fetch自动处理是最可靠的方式。
内容的提问来源于stack exchange,提问作者hammies
相关产品推荐
相关产品推荐

