[英]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.