Windows Server中Axios请求返回JSON截断报unexpected end of JSON错误求助
解决Windows Server环境下Axios请求JSON截断及解析错误的问题
先贴一下你的代码方便参考:
var authOptions = { method: "POST", url: url, data: options.data, headers: options.headers, json: true }; return axios(authOptions) .then(function(response){ console.log(response.data); }) .catch(function(error){ console.log(error); });
这种在本地正常、Windows Server上出现JSON截断+unexpected end of JSON错误的情况,我之前在类似环境里碰到过几次,大概率和传输编码、服务器配置或者响应处理逻辑有关,给你几个实用的排查和解决方向:
强制指定响应编码与禁用压缩
Windows Server默认字符编码常和本地不一致,加上部分反向代理的压缩逻辑可能出问题,容易导致响应截断。可以在axios配置里显式指定编码并禁用压缩:var authOptions = { method: "POST", url: url, data: options.data, headers: { ...options.headers, 'Accept': 'application/json; charset=utf-8', 'Accept-Encoding': 'identity' // 禁用压缩,避免解压不完整 }, responseType: 'text', // 先以文本形式获取完整响应 transformResponse: [function (data) { // 手动清理并解析JSON return JSON.parse(data.trim()); }] };检查IIS的响应限制与压缩配置
如果你的应用部署在IIS上,默认的响应大小限制或动态压缩可能是元凶:- 打开IIS管理器,进入对应站点的「请求筛选」功能
- 切换到「响应头」标签,调大「最大内容长度」(比如设为10485760,即10MB)
- 临时关闭「动态内容压缩」测试,部分旧版本IIS的压缩算法处理大JSON时会出现分片异常
修改响应处理逻辑,先验证原始数据
有时候axios自动解析JSON会提前终止,你可以先获取完整响应文本再手动解析,同时在报错时打印原始内容方便排查:return axios(authOptions) .then(function(response){ // 先打印原始响应,确认是否完整 console.log('原始响应文本:', response.data); return JSON.parse(response.data.trim()); }) .catch(function(error){ if (error.response) { console.log('截断的响应内容:', error.response.data); console.log('响应状态码:', error.response.status); } console.log(error); });排查服务器防火墙或代理拦截
Windows Server上的防火墙、网关或代理软件(如ISA Server)可能会拦截或修改HTTP响应,导致内容截断。可以临时关闭防火墙测试,或者确认代理规则允许完整传递响应内容。
我之前碰到的类似问题,最后是关闭IIS动态压缩就解决了,你可以先从这个方向入手试试。
内容的提问来源于stack exchange,提问作者Nigilan
相关产品推荐
相关产品推荐

