上传文件时报Unexpected EOF异常的原因和解决方案

上传文件时报Unexpected EOF异常的原因和解决方案

作者:陈镇坤27

日期:2022年3月15日

摘要:使用Apache的上传组件,部署服务后,前端上传文件,服务端与客户端建立socket连接,迟迟未接收到requestURI line,超过配置的时间时,会关闭tomcat线程connection,此时Apache组件会报Unexpected EOF错误。

思路历程:百度、谷歌异常解决方案,求证tomcat的connectionTimeOut的含义,查询连接与请求差异,

关键词:tomcat、http、tcp、socket、servlet

前置知识:

网络应用层协议、tomcat基本原理、。

正文

http协议:应用层协议。

HTTP1.0规范:客户端到服务端,一次请求一次响应,每次请求都需要重新建立网络连接。

HTTP1.1规范:客户端到服务端,一次连接,可以包含一个或多个请求。

tcp/udp协议:数据传输层协议。tcp协议是可靠协议,客户端与服务端之间的建立/关闭通信需要三次握手四次挥手。

应用层协议基于传输层协议而来。

在tomcat服务器中,http协议connector会维护客户端与服务端之间的http链接。底层是通过socket套接字,指定tcp协议。

socket是网络通讯基本单元。在代码表达上,是对传输层协议的抽象接口。

使用socket建立连接,本质上是指定传输层协议,建立传输层上的连接。

所以也说,socket连接是长连接。

socket连接的特点是客户端与服务端建立socket连接后,两端都可以互相主动发送信息。

http1.0下,在web请求中,http协议请求访问tomcat服务器,会建立一个socket连接,服务端接收数据并处理,返回数据后会携带一个SocketState.CLOSED给调用者,调用者关闭socket连接。

http1.1下,web请求时,请求头中携带Connection:keep-Alive标识,tomcat接收到请求,建立socket连接后,执行service方法,方法中,会判断请求是否带有Keep-Alive标识,且是否满足其他条件:例如请求数量等,判断为true,则不返回SocketState.CLOSED给调用者。

tomcat管理连接,建立连接后,每个连接的默认等待接收请求时长为20s。

上传文件时报Unexpected EOF异常的原因和解决方案_第1张图片

(tomcat8.5版本官方文档始终没找到对应配置说明,只能拿旧版的作为提示,新版配置里面默认是20S)

tomcat5手册中对connectionTimeout的解释

	The number of milliseconds this Connector will wait, after accepting a connection, for the request URI line to be presented. The default value is 60000 (i.e. 60 seconds).

地址:https://tomcat.apache.org/tomcat-5.5-doc/config/http.html

也就是说,在建立socket连接后,如果20s内迟迟未等到http协议的请求行信息,则socket连接会关闭。

使用Apache 上传组件请求,建立客户端与服务端socket连接,由于前端网络波动等原因导致请求中断,服务端socket超20s未接收到请求信息,则中断socket链接。

解决方案:设置tomcat的指定connector的默认connectionTimeout超时时长为40s,此外后端处理网络异常信息。

你可能感兴趣的:(简单的方案设计,java,tomcat)