Как преодолеть эту проблему безопасности - PullRequest
28 голосов
/ 09 июня 2011

Я реализовал скрипт опроса ajax, который вызывает действие в контроллере сервера каждые 10 секунд. С ответом я заменяю содержимое div:

function getFoo() {
    var link = '/Secure/GetFoo';

    $.post(link, function (response) {
        $('#FooSection').replaceWith(response);
    });

    setTimeout("getFoo();", 10000);
}

Это делается через https . После некоторого времени простоя IE отображает следующее сообщение:

Эта страница имеет доступ к информации это не под его контролем. это создает угрозу безопасности. хотите ли вы продолжить?

Если пользователь нажимает Да , страница перенаправляется на div, отображающий только ответ. Если пользователь нажимает Нет , ничего не происходит, но контейнер div обновляться не будет.

Я знаю Я могу подавить это сообщение через настройки браузера , но это просто приведет меня к выбору по умолчанию Да в соответствии с приведенным выше диалогом.

Подобная проблема была задана до , но, к сожалению, не было никакого решения Я в основном хочу, чтобы мой ajax-опрос работал даже на защищенном соединении. Есть идеи?

Ответы [ 7 ]

15 голосов
/ 13 июня 2011

Вы никогда не должны видеть этот диалог на странице Интернет-зоны.По умолчанию эта операция автоматически и автоматически блокируется в зоне Интернета.

Существуют две основные причины появления этого диалога в зоне интрасети:

1> Попытка выполнить перекрестноезапрос источника с использованием объекта XMLHTTPRequest (http://blogs.msdn.com/b/ieinternals/archive/2011/04/22/ie-security-prompt-page-accessing-cross-domain-information-not-under-its-control.aspx)

2> Попытка перемещения тега OBJECT, размещающего HTML, на страницу перекрестного происхождения.

Вы можете избежать случая # 1, используя XDomainRequest вместо XMLHTTPRequest. Вы можетеизбегайте случая # 2, используя IFRAME вместо тега OBJECT.

5 голосов
/ 13 июня 2011

Я столкнулся с подобной проблемой на днях, так как не смог выяснить, почему IE будет жаловаться после запроса AJAX.

Я использовал сетевую консоль Firebug и просто просматривал запросы один за другим, пока не нашел http: // вместо https://, Я предлагаю вам сделать то же самое - нам будет практически невозможно отладить это не видя страницы, но это может быть что-то вроде фонового изображения, не загружаемого через https.

Примечание: Я заметил, что вы говорите, что это IE, но подобная проблема, вероятно, не будет зависеть от браузера, Firefox / Chrome просто не суетится из-за того, что в нем нет элементов https, как в IE.

3 голосов
/ 20 июня 2011

Вы пытались использовать относительные к протоколу гиперссылки (//something.com/image.png)?См. эту ссылку или эту .

3 голосов
/ 10 июня 2011

В вашем коде есть две вещи:

Почему вы используете ajax-запрос POST?почему не ПОЛУЧИТЬ?Ваш запрос выглядит как запрос GET (вы хотите получить некоторые данные), поэтому метод GET, вероятно, является лучшим выбором.

Он не связан с вашей проблемой, но вы не должны использовать setTimeout со строкой для eval,Вы должны дать setTimeout переменную в качестве первого аргумента, и эта переменная должна быть функцией, которую вы хотите выполнить.

function getFoo() {
    var link = '/Secure/GetFoo';

    $.get(link, function (response) {
        $('#FooSection').replaceWith(response);
    });

    window.setTimeout(getFoo, 10000);
}
2 голосов
/ 19 июня 2011

Вы пытались использовать абсолютный URL?

var link = 'https://www.yourdomain.com/Secure/GetFoo';

2 голосов
/ 17 июня 2011

Я видел, как это происходило раньше, потому что новый контент, вставляемый через вызов ajax, имел ссылки на не защищенные графические ресурсы, есть ли вероятность, что это проблема, с которой вы сталкиваетесь?

2 голосов
/ 13 июня 2011

Если в вашем коде есть хотя бы один элемент, чей атрибут src начинается с «http» вместо «https», IE покажет это сообщение.

Вы уверены, что в данных, которые вы выбираете, нет элементов, которые имеют src = "http: // ..." в своем атрибуте src?

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