Сбой Django-HttpRedirect в Internet Explorer - PullRequest
5 голосов
/ 29 октября 2011

У меня есть приложение Facebook, использующее Django.В одном из моих представлений я использую следующий фрагмент кода, чтобы пользователь вошел в систему.

В IE не возвращается строка HttpResponseRedirect с сообщением об ошибке «Это содержимое не может быть отображено во фрейме ...», хотя другоебраузеры работают нормально.

У вас есть идея, почему IE не работает для HttpResponseRedirect?(Эта проблема возникает на IE9 на Windows 7, сервер использует 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 Ответ

1 голос
/ 14 марта 2012

Это могут быть две вещи, обе относящиеся к модели безопасности браузера.

Опция 1 - это перенаправление на другой домен.Клиенты могут решить следовать перенаправлению или отказаться.В частности, перенаправление HTTP 307. (которое позволяет пересылать данные POST) не всегда принимается клиентами.

Опция 2 связана с перенаправлением ресурса с помощью HTTP-метода POST url другомуресурс с методом GET.

Если HTTP-метод текущего представления и перенаправления различаются (т. е. HTTP POST для / login url и HTTP GET для facebook / myapp), по крайней мере, IE8 откажетсяперенаправления.Я не уверен, что это было изменено в IE9.

Есть несколько вещей, которые вы можете попробовать.

  • Вы можете попробовать другой код ответа HTTP.Предполагая, что нет необходимости пересылать параметры HTTP из исходного запроса в перенаправленный запрос, код ответа 303 будет лучше, чем 307.
  • Если ваша ситуация предполагает перенаправление ресурса HTTP POST на внешнийРесурс HTTP GET на Facebook, еще одна попытка - добавить дополнительную переадресацию посередине: ресурс POST на yoursite.com -> перенаправление на ресурс GET на yoursite.com -> внешнее перенаправление на домен facebook.Опция «дополнительное перенаправление» может исправить один браузер, но сломать другой (браузеры имеют ограничения на перенаправления, которые могут различаться в зависимости от типа браузера и версии).Если вы попадете в эту ситуацию, вам может понадобиться обнаружить пользовательский агент и переключиться между IE и другими браузерами.

Несколько хороших ссылок:

Django / IE8Странность интерфейса администратора

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...