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