Подтвердить что ты не робот

JavaScript междоменный вызов: вызов с HTTP на HTTPS

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

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

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

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

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

Различные примечания:

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

Ответ 1

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

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

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

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

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

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

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

UPDATE

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

Ответ 3

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

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

Ответ 4

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

https://github.com/jpillora/xdomain

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

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