[英]python flask redirect to https from http
我有一个使用 python3.4 和 flask 构建的网站...我已经生成了自己的自签名证书,目前我正在通过本地主机测试我的网站。
我正在使用 python ssl 模块以及这个 flask 扩展名: https://github.com/ke.nethreitz/flask-sslify
context = ('my-cert.pem', 'my-key.pem')
app = Flask(__name__)
sslify = SSLify(app)
...
if __name__ == '__main__':
app.debug = False
app.run(
host="127.0.0.1",
port=int("5000"),
ssl_context=context
)
但是,这似乎不起作用。 我查看了 sslify 源代码,这一行似乎不起作用
def init_app(self, app):
"""Configures the configured Flask app to enforce SSL."""
app.before_request(self.redirect_to_ssl)
app.after_request(self.set_hsts_header)
特别是 function 对 redirect_to_ssl 的调用(我在 redirect_to_ssl function 下添加了自己的打印语句,但我的语句从未打印过)
def redirect_to_ssl(self):
print("THIS IS WORKING")
"""Redirect incoming requests to HTTPS."""
Should we redirect?
criteria = [
request.is_secure,
current_app.debug,
request.headers.get('X-Forwarded-Proto', 'http') == 'https'
]
if not any(criteria) and not self.skip:
if request.url.startswith('http://'):
url = request.url.replace('http://', 'https://', 1)
code = 302
if self.permanent:
code = 301
r = redirect(url, code=code)
return r
我对 python 很陌生。有什么想法吗?
我有一个使用python3.4和flask的网站构建...我生成了自己的自签名证书,目前正在通过本地主机测试我的网站。
我正在使用python ssl模块以及此flask扩展名: https : //github.com/kennethreitz/flask-sslify
context = ('my-cert.pem', 'my-key.pem')
app = Flask(__name__)
sslify = SSLify(app)
...
if __name__ == '__main__':
app.debug = False
app.run(
host="127.0.0.1",
port=int("5000"),
ssl_context=context
)
但是,这似乎不起作用。 我看了一下sslify源代码,这行似乎不起作用
def init_app(self, app):
"""Configures the configured Flask app to enforce SSL."""
app.before_request(self.redirect_to_ssl)
app.after_request(self.set_hsts_header)
特别是对redirect_to_ssl的函数调用(我在redirect_to_ssl函数下添加了自己的print语句,但从未打印过我的语句)
def redirect_to_ssl(self):
print("THIS IS WORKING")
"""Redirect incoming requests to HTTPS."""
Should we redirect?
criteria = [
request.is_secure,
current_app.debug,
request.headers.get('X-Forwarded-Proto', 'http') == 'https'
]
if not any(criteria) and not self.skip:
if request.url.startswith('http://'):
url = request.url.replace('http://', 'https://', 1)
code = 302
if self.permanent:
code = 301
r = redirect(url, code=code)
return r
我是python的新手。 有任何想法吗?
我有一个使用python3.4和flask的网站构建...我生成了自己的自签名证书,目前正在通过本地主机测试我的网站。
我正在使用python ssl模块以及此flask扩展名: https : //github.com/kennethreitz/flask-sslify
context = ('my-cert.pem', 'my-key.pem')
app = Flask(__name__)
sslify = SSLify(app)
...
if __name__ == '__main__':
app.debug = False
app.run(
host="127.0.0.1",
port=int("5000"),
ssl_context=context
)
但是,这似乎不起作用。 我看了一下sslify源代码,这行似乎不起作用
def init_app(self, app):
"""Configures the configured Flask app to enforce SSL."""
app.before_request(self.redirect_to_ssl)
app.after_request(self.set_hsts_header)
特别是对redirect_to_ssl的函数调用(我在redirect_to_ssl函数下添加了自己的print语句,但从未打印过我的语句)
def redirect_to_ssl(self):
print("THIS IS WORKING")
"""Redirect incoming requests to HTTPS."""
Should we redirect?
criteria = [
request.is_secure,
current_app.debug,
request.headers.get('X-Forwarded-Proto', 'http') == 'https'
]
if not any(criteria) and not self.skip:
if request.url.startswith('http://'):
url = request.url.replace('http://', 'https://', 1)
code = 302
if self.permanent:
code = 301
r = redirect(url, code=code)
return r
我是python的新手。 有任何想法吗?
我有一个使用python3.4和flask的网站构建...我生成了自己的自签名证书,目前正在通过本地主机测试我的网站。
我正在使用python ssl模块以及此flask扩展名: https : //github.com/kennethreitz/flask-sslify
context = ('my-cert.pem', 'my-key.pem')
app = Flask(__name__)
sslify = SSLify(app)
...
if __name__ == '__main__':
app.debug = False
app.run(
host="127.0.0.1",
port=int("5000"),
ssl_context=context
)
但是,这似乎不起作用。 我看了一下sslify源代码,这行似乎不起作用
def init_app(self, app):
"""Configures the configured Flask app to enforce SSL."""
app.before_request(self.redirect_to_ssl)
app.after_request(self.set_hsts_header)
特别是对redirect_to_ssl的函数调用(我在redirect_to_ssl函数下添加了自己的print语句,但从未打印过我的语句)
def redirect_to_ssl(self):
print("THIS IS WORKING")
"""Redirect incoming requests to HTTPS."""
Should we redirect?
criteria = [
request.is_secure,
current_app.debug,
request.headers.get('X-Forwarded-Proto', 'http') == 'https'
]
if not any(criteria) and not self.skip:
if request.url.startswith('http://'):
url = request.url.replace('http://', 'https://', 1)
code = 302
if self.permanent:
code = 301
r = redirect(url, code=code)
return r
我是python的新手。 有任何想法吗?
我有一个使用python3.4和flask的网站构建...我生成了自己的自签名证书,目前正在通过本地主机测试我的网站。
我正在使用python ssl模块以及此flask扩展名: https : //github.com/kennethreitz/flask-sslify
context = ('my-cert.pem', 'my-key.pem')
app = Flask(__name__)
sslify = SSLify(app)
...
if __name__ == '__main__':
app.debug = False
app.run(
host="127.0.0.1",
port=int("5000"),
ssl_context=context
)
但是,这似乎不起作用。 我看了一下sslify源代码,这行似乎不起作用
def init_app(self, app):
"""Configures the configured Flask app to enforce SSL."""
app.before_request(self.redirect_to_ssl)
app.after_request(self.set_hsts_header)
特别是对redirect_to_ssl的函数调用(我在redirect_to_ssl函数下添加了自己的print语句,但从未打印过我的语句)
def redirect_to_ssl(self):
print("THIS IS WORKING")
"""Redirect incoming requests to HTTPS."""
Should we redirect?
criteria = [
request.is_secure,
current_app.debug,
request.headers.get('X-Forwarded-Proto', 'http') == 'https'
]
if not any(criteria) and not self.skip:
if request.url.startswith('http://'):
url = request.url.replace('http://', 'https://', 1)
code = 302
if self.permanent:
code = 301
r = redirect(url, code=code)
return r
我是python的新手。 有任何想法吗?
我有一个使用python3.4和flask的网站构建...我生成了自己的自签名证书,目前正在通过本地主机测试我的网站。
我正在使用python ssl模块以及此flask扩展名: https : //github.com/kennethreitz/flask-sslify
context = ('my-cert.pem', 'my-key.pem')
app = Flask(__name__)
sslify = SSLify(app)
...
if __name__ == '__main__':
app.debug = False
app.run(
host="127.0.0.1",
port=int("5000"),
ssl_context=context
)
但是,这似乎不起作用。 我看了一下sslify源代码,这行似乎不起作用
def init_app(self, app):
"""Configures the configured Flask app to enforce SSL."""
app.before_request(self.redirect_to_ssl)
app.after_request(self.set_hsts_header)
特别是对redirect_to_ssl的函数调用(我在redirect_to_ssl函数下添加了自己的print语句,但从未打印过我的语句)
def redirect_to_ssl(self):
print("THIS IS WORKING")
"""Redirect incoming requests to HTTPS."""
Should we redirect?
criteria = [
request.is_secure,
current_app.debug,
request.headers.get('X-Forwarded-Proto', 'http') == 'https'
]
if not any(criteria) and not self.skip:
if request.url.startswith('http://'):
url = request.url.replace('http://', 'https://', 1)
code = 302
if self.permanent:
code = 301
r = redirect(url, code=code)
return r
我是python的新手。 有任何想法吗?
我有一个使用python3.4和flask的网站构建...我生成了自己的自签名证书,目前正在通过本地主机测试我的网站。
我正在使用python ssl模块以及此flask扩展名: https : //github.com/kennethreitz/flask-sslify
context = ('my-cert.pem', 'my-key.pem')
app = Flask(__name__)
sslify = SSLify(app)
...
if __name__ == '__main__':
app.debug = False
app.run(
host="127.0.0.1",
port=int("5000"),
ssl_context=context
)
但是,这似乎不起作用。 我看了一下sslify源代码,这行似乎不起作用
def init_app(self, app):
"""Configures the configured Flask app to enforce SSL."""
app.before_request(self.redirect_to_ssl)
app.after_request(self.set_hsts_header)
特别是对redirect_to_ssl的函数调用(我在redirect_to_ssl函数下添加了自己的print语句,但从未打印过我的语句)
def redirect_to_ssl(self):
print("THIS IS WORKING")
"""Redirect incoming requests to HTTPS."""
Should we redirect?
criteria = [
request.is_secure,
current_app.debug,
request.headers.get('X-Forwarded-Proto', 'http') == 'https'
]
if not any(criteria) and not self.skip:
if request.url.startswith('http://'):
url = request.url.replace('http://', 'https://', 1)
code = 302
if self.permanent:
code = 301
r = redirect(url, code=code)
return r
我是python的新手。 有任何想法吗?
我有一个使用python3.4和flask的网站构建...我生成了自己的自签名证书,目前正在通过本地主机测试我的网站。
我正在使用python ssl模块以及此flask扩展名: https : //github.com/kennethreitz/flask-sslify
context = ('my-cert.pem', 'my-key.pem')
app = Flask(__name__)
sslify = SSLify(app)
...
if __name__ == '__main__':
app.debug = False
app.run(
host="127.0.0.1",
port=int("5000"),
ssl_context=context
)
但是,这似乎不起作用。 我看了一下sslify源代码,这行似乎不起作用
def init_app(self, app):
"""Configures the configured Flask app to enforce SSL."""
app.before_request(self.redirect_to_ssl)
app.after_request(self.set_hsts_header)
特别是对redirect_to_ssl的函数调用(我在redirect_to_ssl函数下添加了自己的print语句,但从未打印过我的语句)
def redirect_to_ssl(self):
print("THIS IS WORKING")
"""Redirect incoming requests to HTTPS."""
Should we redirect?
criteria = [
request.is_secure,
current_app.debug,
request.headers.get('X-Forwarded-Proto', 'http') == 'https'
]
if not any(criteria) and not self.skip:
if request.url.startswith('http://'):
url = request.url.replace('http://', 'https://', 1)
code = 302
if self.permanent:
code = 301
r = redirect(url, code=code)
return r
我是python的新手。 有任何想法吗?
我有一个使用python3.4和flask的网站构建...我生成了自己的自签名证书,目前正在通过本地主机测试我的网站。
我正在使用python ssl模块以及此flask扩展名: https : //github.com/kennethreitz/flask-sslify
context = ('my-cert.pem', 'my-key.pem')
app = Flask(__name__)
sslify = SSLify(app)
...
if __name__ == '__main__':
app.debug = False
app.run(
host="127.0.0.1",
port=int("5000"),
ssl_context=context
)
但是,这似乎不起作用。 我看了一下sslify源代码,这行似乎不起作用
def init_app(self, app):
"""Configures the configured Flask app to enforce SSL."""
app.before_request(self.redirect_to_ssl)
app.after_request(self.set_hsts_header)
特别是对redirect_to_ssl的函数调用(我在redirect_to_ssl函数下添加了自己的print语句,但从未打印过我的语句)
def redirect_to_ssl(self):
print("THIS IS WORKING")
"""Redirect incoming requests to HTTPS."""
Should we redirect?
criteria = [
request.is_secure,
current_app.debug,
request.headers.get('X-Forwarded-Proto', 'http') == 'https'
]
if not any(criteria) and not self.skip:
if request.url.startswith('http://'):
url = request.url.replace('http://', 'https://', 1)
code = 302
if self.permanent:
code = 301
r = redirect(url, code=code)
return r
我是python的新手。 有任何想法吗?
我有一个使用python3.4和flask的网站构建...我生成了自己的自签名证书,目前正在通过本地主机测试我的网站。
我正在使用python ssl模块以及此flask扩展名: https : //github.com/kennethreitz/flask-sslify
context = ('my-cert.pem', 'my-key.pem')
app = Flask(__name__)
sslify = SSLify(app)
...
if __name__ == '__main__':
app.debug = False
app.run(
host="127.0.0.1",
port=int("5000"),
ssl_context=context
)
但是,这似乎不起作用。 我看了一下sslify源代码,这行似乎不起作用
def init_app(self, app):
"""Configures the configured Flask app to enforce SSL."""
app.before_request(self.redirect_to_ssl)
app.after_request(self.set_hsts_header)
特别是对redirect_to_ssl的函数调用(我在redirect_to_ssl函数下添加了自己的print语句,但从未打印过我的语句)
def redirect_to_ssl(self):
print("THIS IS WORKING")
"""Redirect incoming requests to HTTPS."""
Should we redirect?
criteria = [
request.is_secure,
current_app.debug,
request.headers.get('X-Forwarded-Proto', 'http') == 'https'
]
if not any(criteria) and not self.skip:
if request.url.startswith('http://'):
url = request.url.replace('http://', 'https://', 1)
code = 302
if self.permanent:
code = 301
r = redirect(url, code=code)
return r
我是python的新手。 有任何想法吗?
在应用引擎 flex 上,添加:
from werkzeug.middleware.proxy_fix import ProxyFix
def create_app(config=None):
app = Flask(__name__)
app.wsgi_app = ProxyFix(app.wsgi_app)
除了以下解决方案:
@app.before_request
def before_request():
if not request.is_secure:
url = request.url.replace('http://', 'https://', 1)
code = 301
return redirect(url, code=code)
否则,它会导致无限重定向,因为 SSL 在代理后面展开,但在标头中注明。
利用:
app.run(port="443")
当端口为 443 或 8443 时,所有现代浏览器都会自动使用 HTTPS。
我有一个使用python3.4和flask的网站构建...我生成了自己的自签名证书,目前正在通过本地主机测试我的网站。
我正在使用python ssl模块以及此flask扩展名: https : //github.com/kennethreitz/flask-sslify
context = ('my-cert.pem', 'my-key.pem')
app = Flask(__name__)
sslify = SSLify(app)
...
if __name__ == '__main__':
app.debug = False
app.run(
host="127.0.0.1",
port=int("5000"),
ssl_context=context
)
但是,这似乎不起作用。 我看了一下sslify源代码,这行似乎不起作用
def init_app(self, app):
"""Configures the configured Flask app to enforce SSL."""
app.before_request(self.redirect_to_ssl)
app.after_request(self.set_hsts_header)
特别是对redirect_to_ssl的函数调用(我在redirect_to_ssl函数下添加了自己的print语句,但从未打印过我的语句)
def redirect_to_ssl(self):
print("THIS IS WORKING")
"""Redirect incoming requests to HTTPS."""
Should we redirect?
criteria = [
request.is_secure,
current_app.debug,
request.headers.get('X-Forwarded-Proto', 'http') == 'https'
]
if not any(criteria) and not self.skip:
if request.url.startswith('http://'):
url = request.url.replace('http://', 'https://', 1)
code = 302
if self.permanent:
code = 301
r = redirect(url, code=code)
return r
我是python的新手。 有任何想法吗?
我有一个使用python3.4和flask的网站构建...我生成了自己的自签名证书,目前正在通过本地主机测试我的网站。
我正在使用python ssl模块以及此flask扩展名: https : //github.com/kennethreitz/flask-sslify
context = ('my-cert.pem', 'my-key.pem')
app = Flask(__name__)
sslify = SSLify(app)
...
if __name__ == '__main__':
app.debug = False
app.run(
host="127.0.0.1",
port=int("5000"),
ssl_context=context
)
但是,这似乎不起作用。 我看了一下sslify源代码,这行似乎不起作用
def init_app(self, app):
"""Configures the configured Flask app to enforce SSL."""
app.before_request(self.redirect_to_ssl)
app.after_request(self.set_hsts_header)
特别是对redirect_to_ssl的函数调用(我在redirect_to_ssl函数下添加了自己的print语句,但从未打印过我的语句)
def redirect_to_ssl(self):
print("THIS IS WORKING")
"""Redirect incoming requests to HTTPS."""
Should we redirect?
criteria = [
request.is_secure,
current_app.debug,
request.headers.get('X-Forwarded-Proto', 'http') == 'https'
]
if not any(criteria) and not self.skip:
if request.url.startswith('http://'):
url = request.url.replace('http://', 'https://', 1)
code = 302
if self.permanent:
code = 301
r = redirect(url, code=code)
return r
我是python的新手。 有任何想法吗?
我有一个使用python3.4和flask的网站构建...我生成了自己的自签名证书,目前正在通过本地主机测试我的网站。
我正在使用python ssl模块以及此flask扩展名: https : //github.com/kennethreitz/flask-sslify
context = ('my-cert.pem', 'my-key.pem')
app = Flask(__name__)
sslify = SSLify(app)
...
if __name__ == '__main__':
app.debug = False
app.run(
host="127.0.0.1",
port=int("5000"),
ssl_context=context
)
但是,这似乎不起作用。 我看了一下sslify源代码,这行似乎不起作用
def init_app(self, app):
"""Configures the configured Flask app to enforce SSL."""
app.before_request(self.redirect_to_ssl)
app.after_request(self.set_hsts_header)
特别是对redirect_to_ssl的函数调用(我在redirect_to_ssl函数下添加了自己的print语句,但从未打印过我的语句)
def redirect_to_ssl(self):
print("THIS IS WORKING")
"""Redirect incoming requests to HTTPS."""
Should we redirect?
criteria = [
request.is_secure,
current_app.debug,
request.headers.get('X-Forwarded-Proto', 'http') == 'https'
]
if not any(criteria) and not self.skip:
if request.url.startswith('http://'):
url = request.url.replace('http://', 'https://', 1)
code = 302
if self.permanent:
code = 301
r = redirect(url, code=code)
return r
我是python的新手。 有任何想法吗?
在我的情况下,Flask 应用程序位于 AWS API Gateway 后面,@app.before_request 的解决方案给了我永久重定向。
以下简单的解决方案终于奏效了:
@app.after_request
def adjust_response(response):
....
if response.location:
if app.env != "development":
response.location = response.location.replace("http://", "https://", 1)
return response
如果出于安全原因希望所有请求都为 HTTPS,则正确的方法称为HSTS ,在Flask Docs 中提到了如何做到这一点:
response.headers['Strict-Transport-Security'] = 'max-age=31536000; includeSubDomains'
https://flask.palletsprojects.com/en/2.0.x/security/#http-strict-transport-security-hsts
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.