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 не является вариантом. В современных браузерах нет широкой поддержки.
Ответы
Ответ 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
Ответ 2
Я использую Access-Control-Allow-Origin. Вы просто отправляете заголовок, и все в порядке.
См. также AJAX, субдомены и SSL
Ответ 3
Вам следует пересмотреть доступ ко всей странице через HTTPS или по крайней мере быть действительно уверенным, что это невозможно.
Загружая начальную страницу и script через HTTP, у пользователя нет гарантий безопасности, что script - это тот, который вы изначально планировали отправить, и не управляется третьей стороной (например, пароль). Это означает, что любой запрос HTTPS, который обходит SOP, не будет предоставлять те же гарантии безопасности, что и запрос HTTPS на странице, первоначально обслуживаемой через HTTPS.
Ответ 4
Кто-нибудь посмотрел:
https://github.com/jpillora/xdomain
Он использует postMessage и iframes для получения запросов cors и является перекрестным браузером (нет необходимости в сжимании зубов XDomainRequests в IE).
Возможно, это позволит запросить запросы кросс-протокола?