我正在尝试创建一个简单的 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 …