小编Cno*_*171的帖子

带有 ssl_context 的 Flask 服务器如果收到 http 请求就会冻结

我正在尝试创建一个简单的 Flask 服务器,将任何 http 请求重定向到 https。我已经创建了一个证书和密钥文件,并注册了一个before_request钩子来查看请求是否安全并适当重定向,遵循建议此 SO 答案

Flask 服务器按预期响应 https 请求。但是,当我发送 http 请求时,挂钩before_request永远不会被调用,并且服务器永远挂起。如果我从浏览器发送 http 请求,我会看到“ERR_EMPTY_RESPONSE”。之后服务器甚至不响应 https 请求。也没有打印任何日志。

使用 Gunicorn 运行应用程序也没有帮助。唯一的区别是,gunicorn 能够检测到工人被冻结并最终杀死并取代它。我也尝试过使用flask-talisman, 得到相同的结果。

下面是我正在运行的代码

### server.py
from flask import Flask, request, redirect


def verify_https():
    if not request.is_secure:
        url = request.url.replace("http://", "https://", 1)
        return redirect(url, 301)


def create_flask_app():
    app = Flask(__name__)
    app.before_request(verify_https)
    app.add_url_rule('/', 'root', lambda: "Hello World")
    return app


if __name__ == '__main__':
    app = create_flask_app()
    app.run(
        host="0.0.0.0",
        port=5000,
        ssl_context=('server.crt', 'server.key')
    )
Run Code Online (Sandbox Code Playgroud)

python3.8 …

python https flask gunicorn

8
推荐指数
1
解决办法
1135
查看次数

标签 统计

flask ×1

gunicorn ×1

https ×1

python ×1