经过一天的尝试,各种提示,从网络上,我的想法与这个:我有一个最简单的Flask应用程序提供一个静态600 to的文件下载。在大约1,5-2分钟或大约80-280 to (在相同的字节或秒之后),下载停止,客户端得到HTTP 500 (根据IIS日志)。
代码相当琐碎:
__init_.py
def create_app():
filename = inspect.getframeinfo(inspect.currentframe()).filename
root_path = os.path.dirname(os.path.abspath(filename))
app = Flask(__name__, root_path=root_path)
return app
app = create_app()
@app.route("/")
def index():
return render_template('index.html')模板下的index.html:
<html>
<body>
<a href="{{url_for("static", filename="bigfile.bin")}}"> Please download </a>
</body>
</html>如果还试图使用烧瓶的send_from_directory显式的->相同的区别。
我已经设置了至少5分钟的超时时间: ApplicationPool的超时,站点的连接超时,甚至System.applicationhost/ well下的连接超时。在这里,我也将minBytesPerSecond改为0。
IIS服务器是Webserver 2019上的IIS 10,安装了wfastcgi。此问题发生在HTTPS和HTTP上。对于https:打开或关闭HTTP/2没有产生任何效果。我在客户端网站上使用了当前的火狐浏览器、Chrome和iOS Safari,没有什么不同。
版本是:Python3.6.4(我也尝试过3.7.x)、Flask 1.1.1、Werkzeug 1.0.1、wfastcgi 3.0.0。这些版本与其工作的旧的IIS 8.5上的版本完全相同。
在这里,改变操作系统不是一种选择,更改the服务器至少会带来巨大的痛苦。
任何建议,即使是如何调试,在哪里和为什么下载失败(我甚至不确定是否瓶是否仍然涉及到这一点),将是非常感谢的。IIS日志和wfastcgi日志都没有给我任何想法。
发布于 2020-04-03 04:29:57
C.Nivs给我指明了正确的方向。谢谢一堆。
如果其他人遇到类似的问题,下面是我解决这个问题的方法:我必须首先在IIS中安装失败的请求跟踪。这里有一个关于如何使用它的很好的描述:https://learn.microsoft.com/en-us/iis/troubleshoot/using-failed-request-tracing/troubleshooting-failed-requests-using-tracing-in-iis-85。
它透露,请求失败是由于一个FASTCGI_REQUEST_TIMEOUT。因此IIS中还有另一个要处理的超时:它在IIS\Fast设置下,在python.exe->Edit下。设置RequestTimeout解决了我的问题。
https://stackoverflow.com/questions/60997813
复制相似问题