【Spring】ERR_INCOMPLETE_CHUNKED_ENCODING 200 (OK) 问题解决

300 篇文章 448 订阅 ¥39.90 ¥99.00

在这里插入图片描述

1.概述

转载:ERR_INCOMPLETE_CHUNKED_ENCODING 200 (OK) 问题解决

我是在做这个项目的时候遇到这个报错:【Spring】Spring 网络原因导致日志下载失败

2.简述

浏览器调用接口报错 net::ERR_INCOMPLETE_CHUNKED_ENCODING 200 (OK)

错误描述:编码模块不完整,返回浏览器的流不完整

可能原因:

1、丢包

2、响应数据被限制

3、读取流异常终止

针对可能的原因排查可以从几个方面

1、网络是否稳定

2、服务器端是否有对响应数据做限制,比如:nginx转发的数据限制,spring/Servlet的HTTP响应数据大小限制,或者是自定义拦截器的响应数据限制

3、服务器的数据限制,如Tomcat

针对以上排查,根据查阅的资料,有如下具体方式以及对应的解决办法:

>> nginx转发的数据限制

修改nginx的配置文件,在对应的路径下(没有指明就location)里面增加
proxy_buffer_size 1024k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 16 1024k; #proxy_buffers缓冲区,网页平均在32k以下的设置
proxy_busy_buffers_size 2048k; #高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 2048k;#设定缓存文件夹大小,大于这个值,将从upstream服务器传

然后重启nginx

>> tomcat数据限制

修改tomcat的server.xml文件,增加maxHttpHeaderSize属性
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" maxHttpHeaderSize="81920"  />

然后重启 tomcat

>> spring 配置限制

根据spring boot 版本不同在application文件添加不同的配置
Spring Boot 1.3 或之前的版本,配置:
  multipart.maxFileSize = 100Mb
  multipart.maxRequestSize=150Mb

Spring Boot 1.4 版本后配置更改为:
  spring.http.multipart.maxFileSize = 100Mb 
  spring.http.multipart.maxRequestSize = 150Mb

Spring Boot 2.0 之后的版本配置修改为: 单位Mb改为MB了
  spring.servlet.multipart.max-file-size = 100MB 
  spring.servlet.multipart.max-request-size = 150MB

>> spring 加@ResponseBody 引起的流关闭

代码接口上去掉注解@ResponseBody

>> 拦截器

拦截过滤掉一些响应太大的响应

我的
原因:数据导出接口,需要导出量比较大的数据,然后异常,数据小的时候测试通过,数据量变大到一定程度,异常

接口如下:

@ResponseBody
public void exportImsirecord(@RequestBody(required = false) WarningBO warningBO, HttpServletResponse response){
    OutputStream os = response.getOutputStream();
    StringBuffer buf = new StringBuffer();
    buf.append(很多数据);
    os.write(buf.toString().getBytes("utf-8"));
}

请求后然后浏览器报错 net::ERR_INCOMPLETE_CHUNKED_ENCODING 200 (OK)

同时后台也报错:流异常关闭

最后的解决办法是 去掉 @ResponseBody,接口变成

public void exportImsirecord(@RequestBody(required = false) WarningBO warningBO, HttpServletResponse response){
    
}

两个原因:

1、@ResponseBody 走了数据转换,有数据限制

2、过滤器 响应 ResponseBody 读取有时间限制,解析太久中断流

总结:

本质原因都是响应数据不完整导致,排查针对这个去就行,包括前端后端所有都有可能导致,常见的应该是数据配置限制了

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值