发送图片报错ConnectionResetError: [Errno 104] Connection reset by peer

环境

ubuntu 20.04
python 3.6
django 2.2

产生的原因我在网上搜的大概有一下几种

  1. 服务器的并发连接数超过了其承载量,服务器会将其中一些连接关闭;如果知道实际连接服务器的并发客户数没有超过服务器的承载量,则有可能是中了病毒或者木马,引起网络流量异常。可以使用netstat -an查看网络连接情况。
  2. 客户关掉了浏览器,而服务器还在给客户端发送数据;
  3. 浏览器端按了Stop;这两种情况一般不会影响服务器。但是如果对异常信息没有特别处理,有可能在服务器的日志文件中,重复出现该异常,造成服务器日志文件过大,影响服务器的运行。可以对引起异常的部分,使用try…catch捕获该异常,然后不输出或者只输出一句提示信息,避免使用e.printStackTrace();输出全部异常信息。
  4. 防火墙的问题;如果网络连接通过防火墙,而防火墙一般都会有超时的机制,在网络连接长时间不传输数据时,会关闭这个TCP的会话,关闭后在读写,就会导致异常。 如果关闭防火墙,解决了问题,需要重新配置防火墙,或者自己编写程序实现TCP的长连接。实现TCP的长连接,需要自己定义心跳协议,每隔一段时间,发送一次心跳协议,双方维持连接。

其中解决的方式

使用抛出异常的方式
如果是过于频繁请求出错的,可以试用sleep休眠一段时间就可以

我的问题

向前端发送图片文件时,报错连接中断。经过排查是请求头中的文件大小与真实文件大小出现误差,导致出现客户端关闭但服务器仍然发送数据导致连接中断,这是属于第二种问题,解决办法把文件大小改为真实文件大小问题解决

response['Content-Type'] = file_type
response['Content-Disposition'] = 'inline;filename=%s' % the_file_name
# 文件长度
response['content-length'] = size
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值