【问题标题】:Django-HttpRedirect fails in Internet explorerDjango-HttpRedirect 在 Internet Explorer 中失败
【发布时间】:2011-12-17 20:46:22
【问题描述】:

我有一个使用 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")

【问题讨论】:

  • 有什么帮助吗?我仍然无法找出问题所在。

标签: django internet-explorer redirect


【解决方案1】:

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

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

选项 2 与使用 HTTP 方法 POST url 的资源重定向到使用方法 GET 的另一个资源有关。

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

您可以尝试一些事情。

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

几个不错的链接:

Django/IE8 Admin Interface Weirdness

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

【讨论】:

    猜你喜欢
    • 2012-05-26
    • 2012-03-18
    • 1970-01-01
    • 2017-07-19
    • 1970-01-01
    • 1970-01-01
    • 2018-06-27
    • 2013-06-30
    • 1970-01-01
    相关资源
    最近更新 更多