我有一个运行在带有私人DNS的Google App Engine上的网站。
但是每次我打开该网站以http打开时,我都尝试在烧瓶上使用before_request装饰器将http更改为https,但是我收到too_many_redirects错误,我也尝试使用ProxyFix,但是由于我的页面没有X-Forwarded -Proto作为标题,它不会重定向到正确的页面。
编辑:我忘了提到我正在使用Flex环境
配置此行为的最佳方法是什么?在哪里可以设置此配置?如果可以的话,该如何设置?
这就是我尝试重定向的方式:
@app.before_request
def before_request():
if request.endpoint in app.view_functions and request.headers.get('X-Forwarded-Proto', None) == 'http':
code = 301
return redirect(request.url.replace('http://', 'https://'), code=code)
非常感谢您的帮助!
答案 0 :(得分:1)
您可以使用以下方法直接检查https
:
if request.environ.get('HTTPS') == 'off':
return redirect(...)
甚至:
if not request.is_secure:
return redirect(...)
但是,您还必须处理不需要重定向的时间(本地主机,版本,cron作业等)。开始于:
#so can test versions, don't redirect appspot urls:
if "appspot" in request.environ.get('HTTP_HOST'):
return None
if os.environ['SERVER_NAME'].startswith('1') or os.environ['SERVER_NAME'].startswith('localhost'):
return None
user_agent = request.environ.get('HTTP_USER_AGENT', 'fake')
# cron, taskqueue, module, development, no redirect
if ( 'AppEngine-Google' in user_agent or
'my-module' in request.environ.get('CURRENT_MODULE_ID')):
return None
答案 1 :(得分:0)
检查一下 python flask redirect to https from http
@app.before_request
def before_request():
if request.url.startswith('http://'):
url = request.url.replace('http://', 'https://', 1)
code = 301
return redirect(url, code=code)
答案 2 :(得分:0)
由于您正在使用App Engine,因此您可能只想更改app.yaml
以始终要求网址安全。例如:
- url: .*
script: main.app
secure: always
seucre: always
标志可确保使用该规则路由的所有请求均被加密。完全不需要Flask。
答案 3 :(得分:0)
我也在App Engine上运行flask应用程序。使用flask-talisman并将force_https_permanent设置为true并将force_https设置为true https://github.com/GoogleCloudPlatform/flask-talisman
滑行者=护符( 应用程式 content_security_policy = csp, content_security_policy_nonce_in = ['script-src'], force_https_permanent ='true', force_https ='true' )
woold上面的示例还添加了一个csp,它对于安全性也非常有用。