如果您无法访问网络服务器,并且唯一的方法是拦截请求,然后从http重定向到https,重定向的最佳方法是什么?
我尝试使用NewRequest查看订阅者。我做了类似的事情:
@subscriber(NewRequest) def modify_protocol(event): if re.search('some string', event.request.host_url): event.request.scheme = 'https'
然而,这并没有达到我的预期。页面仍在呈现中。任何想法,将不胜感激。
提前致谢。
答案 0 :(得分:7)
在视图中:
if req.scheme == "http":
return HTTPFound("https://" + req.host + req.path_qs)
使用事件监听器:
@subscriber(NewRequest)
def redirect(event):
if event.request.scheme == "http":
raise HTTPFound("https://" + event.request.host + event.request.path_qs)
我研究了使用send
和get_response
的方法,但找不到多少。
答案 1 :(得分:-1)
一些未经请求的建议 - 请勿从非SSL重定向到SSL。
存在安全问题。基本上,如果有人设法使用非SSL服务中的Man-In-The-Middle,他们可以将其重定向到在不同服务器上运行有效证书的SSL服务 - 用户可能不会注意到这一点。
最好提供一个警告用户的页面,并提供明文链接供他们点击。