Можно ли заставить XDomainRequest работать с SSL? - PullRequest
16 голосов
/ 08 июня 2010

У меня есть код, который использует объект Microsoft XDomainRequest в IE8. Код выглядит так:

var url = "http://<host>/api/acquire?<query string>";  
var xdr = new XDomainRequest();  
xdr.onload = function(){  
    $.("#identifier").text(xdr.responseText);  
};  
xdr.open("GET", url);  
xdr.send();  

Когда схема в "url" равна "http://", команда работает нормально. Однако, когда схема" https://", IE8 выдает мне ошибку JavaScript "Доступ запрещен". Обе схемы прекрасно работают в FF 3.6.3, где я, конечно, использую XmlHttpRequest. С обоими браузерами я соблюдаю W3C Access Control. «http://" работает для обоих браузеров в разных источниках. Поэтому проблема в IE8, XDomainRequest и SSL.

Сертификат SSL не является проблемой. Если я наберу https://>/ в адресной строке IE8, где <host> такой же, как в «url» выше, страница загружается нормально.

Итак, мы имеем следующее:
- нажатие https://>/ прямо из браузера отлично работает;
- нажатие https://>/api/acquire?> через XDomainRequest не разрешено.

Можно ли это сделать? Я что-то пропускаю?

1 Ответ

18 голосов
/ 08 июня 2010

Видимо, ответ здесь: http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx

Пункт 7 на этой странице гласит: «Запросы должны быть направлены на ту же схему, что и страница хостинга».

Вот вспомогательный текст для пункта 7:

"Мы определенно стремились предотвратить создание страниц HTTPS. XDomainRequests для ресурсов на основе HTTP, так как этот сценарий представляет Угроза безопасности смешанного контента, которую делают многие разработчики и большинство пользователей не понимаю.

Однако это ограничение слишком широкое, потому что оно предотвращает HTTP страницы от выдачи запросов XDomainRequests, предназначенных для страниц HTTPS. Пока это правда, что сама страница HTTP, возможно, была взломана, нет причина того, что это должно быть запрещено получать общественные ресурсы надежно. "

В настоящее время может показаться, что ответ на мой первоначальный вопрос: ДА, если страница хостинга может использовать схему "https://"; НЕТ, если она не может.

...