gpt4 book ai didi

Django-Http 重定向在 Internet Explorer 中失败

转载 作者:行者123 更新时间:2023-12-04 21:49:18 29 4
gpt4 key购买 nike

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

在 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 是重定向到另一个域。
客户可以决定遵循重定向,或拒绝。特别是 HTTP 307 重定向(允许转发 POST 数据)并不总是被客户端接受。

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

如果当前 View 和重定向的 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

    关于Django-Http 重定向在 Internet Explorer 中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7939289/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com