JavaScript междоменный вызов: вызов от HTTP до HTTPS - PullRequest
18 голосов
/ 07 декабря 2011

Мне нужно сделать асинхронный вызов защищенного (HTTPS) URL для того же домена.

В настоящее время страница работает с обычным HTTP (небезопасным).

Другими словами: это вызов URL в том же домене, но с использованием HTTPS.

Перед переключением этих вызовов на HTTPS я прекратил реализацию прокси-сервера на стороне сервера, чтобы разрешить междоменные вызовы AJAX, но теперь я сталкиваюсь с одной и той же политикой происхождения, поскольку HTTP и HTTPS также рассматриваются как разные источники. Так что этот прокси непригоден.

Резюме: как выполнять междоменные, асинхронные POST-запросы в этом сценарии?

Различные заметки:

  • Я не мог принять ответ, предлагающий JSONP. Асинхронные вызовы должны использовать глагол POST.
  • Я использую последнюю версию jQuery. Ответ может быть основан на этой библиотеке или любом другом решении этой проблемы.
  • Доступ ко всей странице через HTTPS не является решением.
  • Серверная платформа - Microsoft .NET 4.0 (ASP.NET 4.0).
  • UDPATE : CORS не вариант. В современных браузерах для этого нет широкой поддержки.

Ответы [ 4 ]

14 голосов
/ 07 декабря 2011

Прежде всего, у меня +1 оба вопроса от @missingo и @ PiTheNumber.

Потратив много часов, я пришел к выводу, что собираюсь переключить всю страницук HTTPS.Это потому, что:

  • Большинство современных браузеров поддерживают CORS, но Internet Explorer, начиная с 8-й версии, имеет собственную реализацию (объект XDomainRequest), которая может быть отключена на некоторых компьютерах (у меня былизапрос домена отключен по умолчанию в зоне безопасности Интернета).

    • Opera не поддерживает CORS.12-я версия будет поддерживать его, но это не вариант, так как пользователи должны сначала принять эту новую версию, и это не произойдет через 2 дня.

    • Мне нужно сделать перекрестныйзапросы домена, так как приложение веб-клиента должно запросить уровень обслуживания RESTful, расположенный в другом домене.Ни в коем случае.

    • Переключение всего на HTTPS заставляет подход прокси сервисного уровня снова работать (это ожидаемое поведение).

В любом случае, спасибо, потому что оба ответа очень помогли мне прийти к такому выводу.

ОБНОВЛЕНИЕ

@ Сэм добавил комментарий, который может быть интересен любому.Речь идет о том, как получить CORS в Internet Explorer 8 и 9 (см. № 7): http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx

9 голосов
/ 07 декабря 2011

Я использую Access-Control-Allow-Origin .Вы просто отправляете заголовок и все в порядке.

См. Также AJAX, поддоменов и SSL

2 голосов
/ 07 декабря 2011

Вам следует пересмотреть доступ ко всей странице через HTTPS или, по крайней мере, быть уверенным, что это невозможно.

Загружая начальную страницу и сценарий по HTTP, пользователь не может гарантировать безопасность того, что сценарий - это тот, который вы изначально намеревались отправить, и что им не манипулирует третье лицо (например, путем кейлогинга его пароля). Это означает, что любой запрос HTTPS, который обходит SOP, не будет обеспечивать те же гарантии безопасности, что и запрос HTTPS со страницы, первоначально обслуживаемой по HTTPS.

1 голос
/ 03 октября 2014

Кто-нибудь смотрел на:

https://github.com/jpillora/xdomain

Он использует postMessage и iframes для выполнения запросов cors и является кроссбраузерным (не нужно сжимать зубы XDomainRequests в IE).

Возможно, это разрешит запросы кросс-протоколов?

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