IE11 игнорирует X-Frame-Options после перенаправления - PullRequest
0 голосов
/ 17 декабря 2018

У меня есть веб-приложение, которое открывается через приложение Facebook Messenger.На мобильном телефоне он открывается в веб-обозревателе Facebook Messenger, на рабочем столе - в iFrame.Это работает во всех браузерах, кроме IE11.

Мы устанавливаем заголовок X-Frame-Options 'ALLOW-FROM https://www.messenger.com'. Когда приложение впервые загружается в iFrame, оно загружается без проблем.Затем приложение отвечает на запрос с 302 и перенаправляет.Это страница, которая перенаправляется на страницу с сообщением об ошибке «Этот контент не может быть отображен во фрейме».В консоли нет ошибки, как это обычно бывает, когда содержимое iFrame блокируется в других браузерах.

Есть ли какой-то аспект перенаправления в iFrame, который IE11 не поддерживает?

Подробнееapplication: это отрендеренное веб-приложение на стороне сервера Django, использующее JS на клиенте.Я попытаюсь разбить порядок операций:

Запрос 1: GET к конечной точке1, которая возвращает документ - это успешно отображается в iFrame

Запрос 2: POST к конечной точке1 из JS наклиент

const formData = new FormData();

        formData.append('psid', thread_context.psid);
        formData.append('tid', thread_context.tid);

        const xhr = new XMLHttpRequest();

        xhr.onload = function (event) {
            if (this.status !== 200) {
                handleError(this);
                return;
            }

            window.location.href = this.responseURL;
        };
        xhr.onerror = handleError;

        xhr.open('POST', postUrl);
        xhr.send(formData);

Ответ - это код состояния 302 с заголовком местоположения

Запрос 3: GET к местоположению, возвращенному в ответе 302.Ответ - код состояния 200 и включает документ в теле.Это приводит к срабатыванию xhr.onload выше, а затем вызывает window.location.href для перенаправления на новое местоположение, возвращенное ранее.

Запрос 4: GET в результате обновления window.location.href.Ответ - код состояния 200. Это когда браузер отображает сообщение «содержимое не может быть отображено во фрейме».

Каждый из этих запросов включает заголовок X-Frame-Options 'ALLOW-FROM https://www.messenger.com' в ответе.

1 Ответ

0 голосов
/ 19 декабря 2018

Получается, что сообщение «содержимое не может быть отображено во фрейме» было красной сельдью.Проблема действительно связана с настройкой:

window.location.href = this.responseURL;

В IE и, возможно, более старых версиях Edge responseURL не является поддерживаемым свойством XMLHttpRequest .Кроме того, кажется невозможным получить URL запроса после 302 в IE.В результате мое решение будет состоять в том, чтобы переписать наше использование возврата 302 для начала и вместо этого вернуть ответ JSON с URL-адресом для перенаправления.

...