linux – HTTP下载在一段时间后停止,无法恢复

前端之家收集整理的这篇文章主要介绍了linux – HTTP下载在一段时间后停止,无法恢复前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当我尝试通过HTTP下载文件时,下载有时会在大约30 MB后停止.下载速率降至0 B / s,没有数据继续存在.当我停止下载并再次恢复时,下载仍然会挂起.但是当我再次从字节0重新下载它时,一旦它再次停止,一切都可以正常工作,最高可达30 MB.有时,经过几个小时后,它会再次正常工作而不会出现问题下载停止时文件中的位置是可变的,但大多数情况下它大约为30-35 MB.

作为下载管理器,我使用wget.使用curl和其他下载管理器时会发生相同的行为.该错误与我下载的服务器无关.我也在网络中的其他Linux计算机上发现了这个错误.我网络上的所有计算机都在x86上运行Gentoo Linux.

我网络上的所有互联网连接都通过网络上的服务器运行,该服务器在端口80上运行透明的Squid代理.该服务器连接到路由器,这是德国电信公司的Speedport W 700V.该路由器使用ADSL连接到互联网,速度为448 kbit / s,速度为96 kbit / s.

我几乎可以肯定我的透明代理不是问题所在.我没有解决问题就关掉了.我也直接通过WLAN连接到路由器而不解决问题.我还尝试通过HTTP下载另一个端口.此外,我尝试使用IPv6从我的计算机下载带有gateway6隧道的文件,这导致了完全相同的问题.

现在奇怪的是,使用FTP和HTTPS(在同一台计算机上也使用wget)一切正常.更奇怪的是:当我恢复使用FTP或HTTPS通过HTTP挂起的下载时,以这种方式下载几个字节,停止wget然后使用HTTP再次恢复,它再次加载数据!但在几MB之后,它可能会再次停止.不幸的是,以这种方式下载的文件总是被破坏(MD5总和不正确),因此在某些时候,必定存在虚假数据.我尝试在下载的文件搜索HTML错误消息,但grep -i html没有找到任何内容. (我想不出在文件搜索GZIP压缩的HTML错误消息的方法,所以我没试过.)

我尝试在wget上使用strace时无法恢复下载,你可以找到整个输出on pastebin.重要的行每秒重复一次:

clock_gettime(CLOCK_MONOTONIC,{326102,62176435}) = 0
)                    = 1
write(2,"78% [++++++++++++++++++++++++++++"...,19578% [+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                                  ] 110,683,685 --.-K/s              ) = 195
select(4,[3],NULL,{0,949999}) = 0 (Timeout)

我完全不知道这个问题可能是什么原因.似乎无论什么原因导致问题都说HTTP.似乎智能地说HTTP甚至可以在IPv6-over-IPv4隧道中对其进行认证.但那可能是什么呢?为什么它有时会发生呢?另一种可能性是我的计算机上存在问题,在其他Gentoo Linux计算机上也是如此.

有没有人遇到过这样的问题?可能是什么原因,我在哪里继续调查以了解更多有关该问题的信息?

更新:

我刚刚遇到问题并尝试通过路由器的WLAN恢复下载,这次它起作用了.也许在我上次使用WLAN进行测试时我做错了什么.现在也许我的透明代理服务器实际上是问题所在.它是一个非常基本的Squid代理服务器,不会缓存任何东西.也许有趣的是,第二个Squid代理在另一个端口上的同一台计算机上运行.

更新:

下载再次挂起,这次我关闭了所有防火墙设置并停止了所有代理服务器.我无法从直接连接到路由器的网络服务器恢复下载.所以我的代理服务器肯定不是导致问题的原因.我现在会尝试升级我的路由器的固件,虽然我没有管理员访问权限.我会看到我能做什么.

更新:

升级到我的路由器的最新固件没有帮助.我认为没有其他可能性,这是我的ISP的错.我的“解决方案”现在通过其他地方的SSH服务器隧道传输所有流量.

解决方法

Even more strange: when I resume the
download that hanged over HTTP using
FTP or HTTPS,download a few bytes
that way,stop wget and then resume
again using HTTP,it loads data again!
But after a few MB,it may stop again.
Unfortunately,files downloaded that
way are always broken (the MD5 sum is
not correct)

这会尖叫“破解代理”恢复HTTP下载的协议并不复杂(它只是一个额外的标题),但这正是破坏代理会弄乱的事情.

我打赌如果你尝试使用wget下载一个大文件,等待它失败,然后运行wget -c将http更改为https,它将恢复正常.

猜你在找的Linux相关文章