我有一个 Quart 应用程序,我用它将响应流回客户端。我正在使用 asyncio.sleep 来延迟响应完成,如果我将延迟设置为 59 秒,一切正常。流完成没有任何问题。如果我将时间增加到 120 秒,则响应似乎超时。这是客户端接收到流的第一部分,但大约 60 秒后,浏览器在 Chrome 中抛出错误:net::ERR_HTTP2_PROTOCOL_ERROR 200。Firefox 抛出 TypeError。
我正在将 Hypercorn 与 Nginx 一起使用。
hypercorn config.py 文件内容如下:
Shutdown_timeout = 123.0
ssl_handshake_timeout = 123.0
startup_timeout = 123.0
nginx.conf 中的相关设置:
location @proxy_to_app {
proxy_read_timout = 600s
}
我不知道如何解决这个问题。
我找出了问题的根源。它与 Quart、Hypercorn 或 Nginx 无关。问题在于 Cloudflare 和 http2,它是由 WriteTimeout 引起的。请参阅此答案: net::ERR_HTTP2_PROTOCOL_ERROR 是关于什么的?
那么问题是,如何在 Cloudlfare 中改变这一点。
我没有将 Quart 配置为在 http2 中工作,这有帮助吗?