Http Tomcat报告文件下载的500状态已成功启动
关于为什么我们可能会从tomcat收到这500个状态的文件下载,而这些文件下载似乎是成功开始的(200个状态),有什么友好的建议吗 我们正在使用一个日志来记录对tomcat服务器的所有请求 模式如下: #字段:日期时间所用时间sc状态cs方法x-H(方案)cs(主机)cs uri系统cs uri查询sc(内容长度)字节c-ip x-R(访问\度量\用户名)x-R(访问\度量\开放ID)x-R(访问\度量\用户ID)x-R(访问\度量\会话ID)cs(引用)cs(用户代理) #版本:2.0 #软件:ApacheTomcat/7.0.76 下面是一个文件下载的500状态响应示例,该文件下载启动后发送1219416字节(1.1兆)数据失败 2019-09-24 06:00:14 200.109 500获取https“www.www.{HOST_NAME}.org”/api/v1/archive/request/{UUID}/file/{UUID}api-token={api_-token}”7600353549“1219416 xxx.xx.xxx.181”{USER_-OPENID}“{USER_-UUID}”-“{REFERER}”Mozilla/5.0(Windows NT 6.1;Trident/7.0;rv:11.0)像Gecko一样 以下是我们所有领域的解释:Http Tomcat报告文件下载的500状态已成功启动,http,tomcat,Http,Tomcat,关于为什么我们可能会从tomcat收到这500个状态的文件下载,而这些文件下载似乎是成功开始的(200个状态),有什么友好的建议吗 我们正在使用一个日志来记录对tomcat服务器的所有请求 模式如下: #字段:日期时间所用时间sc状态cs方法x-H(方案)cs(主机)cs uri系统cs uri查询sc(内容长度)字节c-ip x-R(访问\度量\用户名)x-R(访问\度量\开放ID)x-R(访问\度量\用户ID)x-R(访问\度量\会话ID)cs(引用)cs(用户代理) #版本:2.0 #软件
- 日期
- 时间
- 所用时间,请求从开始到完成所用的时间量
- sc状态,http状态代码
- cs_方法,http请求方法
- 使用的http协议x-H(scheme)始终是https
- 政务司司长(主持人)、网站主持人
- cs uri系统,请求的url
- cs uri查询,查询参数
- sc(内容长度),响应中预期的字节数
- bytes,发送的字节数
- c-ip,客户端ip地址
- x-R(access\u metrics\u username),用户的用户名
- x-R(access\u metrics\u openid),用户的openid
- x-R(access\u metrics\u userid),用户的数据库uuid
- x-R(access\u metrics\u sessionid),JSSessionID值
- 政务司司长(参考)
- 政务司司长(用户代理)
- 开始下载,然后从浏览器中取消下载。访问日志报告该请求的状态代码为200
- 开始下载并将文件从tomcat下载的位置移动到磁盘上
- org.apache.catalina.connector.ClientAbortException
- java.net.SocketException
- xxx.xxx.service.security.xxx成功拒绝例外
- org.apache.commons.fileupload.FileUploadBase$IOFileUploadException
try {
FileCopyUtils.copy(new FileInputStream(file), response.getOutputStream());
} catch (FileNotFoundException | IOException e) {
throw new RuntimeException(e);
}
在调用链中没有其他try/catch语句。您多久会看到这些情况?这是个好问题。在过去的两个月里,我们已经收到了数十万(可能总共一百万)的申请。主要来自中国的ip地址。在其他日志文件中是否有诸如“客户端中止”之类的日志消息?同样,好问题。简短回答:不。再回答:嗯,也许吧。我将用更多关于我们如何处理异常和类似情况的信息更新这个问题。如果在执行
copy()
之后,在响应的OutputStream
上添加显式的close()
,情况会有所改善吗?您可能需要认真研究如何让Tomcat使用sendfile
为您流式传输文件。它将提高性能并减少您需要照看的代码量。