После дня, когда я попробовал всевозможные подсказки из Интернета, у меня не осталось идей с этим: у меня самое простое Flask приложение, обслуживающее файл stati c 600MB для загрузки. Примерно через 1,5–2 минуты или около 80–280 МБ (поэтому совсем не после того же количества байтов или секунд) загрузка останавливается, и клиент получает HTTP 500 (согласно журналу IIS).
- Если я предоставлю тот же файл с веб-сайта stati c (без python или flask при всех задействованных) на этом IIS, загрузка завершится.
- Все работает нормально, если я запускаю flask на той же машине, что и локальный сервер (и, конечно, получаю к нему доступ через localhost).
- Если я обслуживаю одно приложение в секунду сервер под управлением Windows Server 2012R2 и IIS 8.5, работает нормально.
- В журнале wfastcgi не отображаются ошибки, а flask не выдает никаких исключений.
Код довольно тривиален:
__ 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>
Если вы также пытались явно использовать flask send_from_directory -> та же разница.
Я установил все известные мне тайм-ауты, по крайней мере, до 5 минут: тайм-ауты для ApplicationPool, тайм-аут соединения с сайтом и даже тайм-аут соединения в system.applicationHost / webLimits. Там я также изменил minBytesPerSecond на 0.
Веб-сервер - это IIS 10 на Windows Сервер 2019 с установленным wfastcgi. Проблема возникает по HTTPS и по HTTP. Для https: включение или выключение HTTP / 2 не оказало влияния. Я использовал текущие Firefox, Chrome и iOS Safari на клиентском сайте, без разницы.
Версии: Python 3.6.4 (я также пробовал 3.7.x) Flask 1.1.1 Werkzeug 1.0.1 wfastcgi 3.0.0. Это те же версии, что и на более старых IIS 8.5, где он работает.
Смена ОС здесь не вариант, изменение веб-сервера будет по крайней мере огромной болью.
Любые предложения даже относительно того, как отлаживать, где и почему именно загрузка не удалась (я даже не уверен, если flask все еще участвует в этом пункте) будет высоко оценен. Ни журналы IIS, ни журнал wfastcgi больше не дают мне представления.