一个关于 net::ERR_INCOMPLETE_CHUNKED_ENCODING 200 的BUG,在chrome与ajax请求的情况下

本文介绍了在使用Chrome浏览器进行AJAX请求时遇到的net::ERR_INCOMPLETE_CHUNKED_ENCODING 200错误。问题发生在TOMCAT8.5和SPRING MVC 3.2.4的环境中。错误源于DispatcherServlet处理异步请求时,由于响应已提交,尝试创建session导致的异常。解决方案是修改HandlerInterceptor,在preHandle方法中创建session,从而避免在postHandle中触发异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

BUG的环境,WEB服务器是TOMCAT8.5, 框架是SPRING MVC 3.2.4 ,开发环境IDEA 2020,JDK1.8 ; 这是个老项目改造,我也帮同事定位的。

1. 异常情况描述:

       通过chrome浏览器或ajax请求时,chrome能接收到服务段返回的数据,ajax请求直接抛network error的错误信息。网上主要又两种说法:

一种说法是返回JSON格式数据不完整导致。

另一种说法是 Transfer-Encoding:chunked 块传输有BUG。

2. BUG处理过程:

      处理过程一波三折,一开始总是各种怀疑与验证。认为前端同事的问题,认为请求头的问题,认为返回头的问题。然后搜索相同的BUG情况,网i上说的两种情况也不符合。但是那天晚上在加时用 BING搜英文确实有搜到说,Tomcat 8对Spring MVC的异步处理有BUG。接着排除了前端的问题才把注意力集中在后端上来,我知道 Spring MVC DispatcherServlet 的请求时异步处理的,DispatcherServlet 的 doDispath 的部分源码:

protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception {
		HttpServletRequest processedRequest = request;
		HandlerExecutionChain mappedHandler = null;
		boolean multipartRequestParsed = false;

		WebAsyncManager asyncManager = WebAsyncUtils.getAsyncManager(request);

		try {
			ModelAndView mv = null;
			Exception dispatchException = null;

			try {
				processedRequest = checkMultipart(request);
				multipartRequestParsed = processedRequest != request;

				// Determine handler for the current request.
				mappedHandler = getHandler(processedRequest, false);
				if (mappedHandler == null || mappedHandl
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值