Ajax с использованием https на странице http

Мой сайт использует протокол http и https; это не влияет на контент. Мой сайт использует jQuery ajax calls, который заполняет некоторые области на странице.

Теперь я хотел бы сделать все ajax-вызовы через https. (пожалуйста, не спрашивайте меня, почему:)) Когда я нахожусь на странице с протоколом https, работают запросы ajax. Когда я нахожусь на странице с протоколом http, я получаю ошибку javascript: Доступ к ограниченному URI отклонен

Я знаю, что это проблема перекрестного домена (на самом деле это проблема с перекрестным протоколом), и я знаю, что я должен использовать тот же протокол в вызовах ajax, что и на текущей странице.

Тем не менее, я хочу, чтобы все вызовы ajax были https и вызывали их на странице, которая была передана через http. Есть ли способ обхода решения (какое-то решение json/proxy?), Или это просто невозможно?

Ответ 2

Попробуйте JSONP.

большинство JS-библиотек делают это так же просто, как и другие вызовы AJAX, но внутренне используют iframe для выполнения запроса.

Если вы не используете JSON для своей полезной нагрузки, вам придется свернуть собственный механизм вокруг iframe.

лично, я бы просто перенаправил форму http://на страницу https://one

Ответ 3

http://example.com/ может разрешить другой VirtualHost, чем https://example.com/ (который, поскольку заголовок хоста не отправляется, отвечает на значение по умолчанию для этого IP-адреса), поэтому эти два рассматриваются как отдельные домены и, следовательно, подвержены ограничениям в Crossdomain JS.

Обратные вызовы JSON могут позволить вам избежать этого.

Ответ 4

Проверьте проект Forge с открытым исходным кодом. Он предоставляет реализацию JavaScript TLS, а также некоторые Flash для обработки настоящих междоменных запросов:

http://github.com/digitalbazaar/forge/blob/master/README

Короче говоря, Forge позволит вам создавать XmlHttpRequests с веб-страницы, загруженной через http на сайт https. Для включения междоменных запросов вам необходимо предоставить файл политики междоменной политики Flash через ваш сервер. Просмотрите записи в блоге в конце README, чтобы получить более подробное объяснение того, как это работает.

Однако я должен упомянуть, что Forge лучше подходит для запросов между двумя разными https-доменами. Причина в том, что существует потенциальная атака MiTM. Если вы загружаете JavaScript и Flash с незащищенного сайта, это может быть скомпрометировано. Наиболее безопасное использование - загрузить его с защищенного сайта, а затем использовать его для доступа к другим сайтам (безопасным или иным образом).

Ответ 5

Вы можете попытаться загрузить страницу https в iframe и маршрутизировать все запросы ajax в/из фрейма через какой-либо мост, это хакгаунд, но он может работать (не уверен, что он наложит те же ограничения доступа, что и безопасный контекст). В противном случае локальным прокси-сервером HTTP для перенаправления запросов (например, любых перекрестных доменных вызовов) будет принятое решение.

Ответ 6

Вот что я делаю:

Создайте скрытый iFrame с данными, которые вы хотите опубликовать. Поскольку вы все еще контролируете iFrame, то такое же происхождение не применяется. Затем отправьте форму в iFrame на страницу ssl. Затем ssl-страница перенаправляется на страницу, отличную от ssl, с сообщениями о состоянии. У вас есть доступ к iFrame.