在金字塔中,如何从http重定向到https?

时间:2013-06-05 05:44:46

标签: python pyramid

如果您无法访问网络服务器,并且唯一的方法是拦截请求,然后从http重定向到https,重定向的最佳方法是什么?

我尝试使用NewRequest查看订阅者。我做了类似的事情:

@subscriber(NewRequest)
def modify_protocol(event):
    if re.search('some string', event.request.host_url):
        event.request.scheme = 'https'

然而,这并没有达到我的预期。页面仍在呈现中。任何想法,将不胜感激。

提前致谢。

2 个答案:

答案 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)

我研究了使用sendget_response的方法,但找不到多少。

答案 1 :(得分:-1)

一些未经请求的建议 - 请勿从非SSL重定向到SSL。

存在安全问题。基本上,如果有人设法使用非SSL服务中的Man-In-The-Middle,他们可以将其重定向到在不同服务器上运行有效证书的SSL服务 - 用户可能不会注意到这一点。

最好提供一个警告用户的页面,并提供明文链接供他们点击。