Django-HttpRedirect在Internet Explorer中失败

时间:2011-10-29 13:46:32

标签: django internet-explorer redirect

我有一个使用Django的Facebook应用程序。在我的一个视图中,我使用以下代码来使用户登录。

在IE中,返回HttpResponseRedirect行失败,并显示错误消息“此内容无法在框架中显示...”,尽管其他浏览器工作正常。

你有一个想法,为什么IE为HttpResponseRedirect失败? (这是在Windows 7上的IE9上生成的问题,服务器正在使用django-1.3)

def auto_login(request):
    username = request.GET['username']
    password = request.GET['password']
    user = authenticate(username=username, password=password)
    if user is not None:
            if user.is_active:
        login(request, user)
        theURL='http://apps.facebook.com/myapp/'
        return HttpResponseRedirect(theURL)
            else:
            return HttpResponse("disabled account")
    else:
        return HttpResponse("Invalid login")

1 个答案:

答案 0 :(得分:1)

这可能是两件事,都与浏览器安全模型有关。

选项1 是重定向到另一个域。 客户可能决定遵循重定向或拒绝。特别是客户端并不总是接受HTTP 307重定向(允许转发POST数据)。

选项2 与使用HTTP方法POST网址将资源重定向到使用方法GET的其他资源相关。

如果当前视图的HTTP方法和重定向不同(即针对/ login url的HTTP POST与facebook / myapp的HTTP GET),至少IE8将拒绝重定向。我不确定IE9中是否已更改。

你可以尝试一些事情。

  • 您可以尝试其他HTTP响应代码。假设不需要将HTTP参数从原始请求转发到重定向的请求,响应代码303将优于307。
  • 如果您的情况涉及将HTTP POST资源重定向到Facebook上的外部HTTP GET资源,则另一次尝试会在中间添加额外的重定向: yoursite.com上的POST资源 - >在yoursite.com上重定向到GET资源 - >外部重定向到facebook域。
  • “额外重定向”选项可以修复一个浏览器但会破坏另一个浏览器(浏览器对重定向有限制,可能因浏览器类型和版本而异)。如果您遇到这种情况,您可能需要检测用户代理并在IE和其他浏览器之间切换。

一些好的链接:

Django/IE8 Admin Interface Weirdness

http://en.wikipedia.org/wiki/List_of_HTTP_status_codes