Мой сайт использует протоколы http и https; это не влияет на содержание. На моем сайте используются вызовы jQuery ajax, которые также заполняют некоторые области на странице.
Теперь я хотел бы выполнять все вызовы ajax через https. (пожалуйста, не спрашивайте меня, почему :)) Когда я нахожусь на странице с протоколом https, запросы ajax работают. Когда я нахожусь на странице с протоколом http, я получаю сообщение об ошибке javascript: доступ к ограниченному URI запрещен
Я знаю, что это проблема кросс-доменов (на самом деле, проблема кросс-протокола), и я знаю, что мне следует использовать тот же протокол в вызовах ajax, что и на текущей странице.
Тем не менее, я хочу, чтобы все вызовы ajax были https и вызывали их на странице, обслуживаемой через http. Есть ли обходной путь для этого (какое-то решение json / proxy?), Или это просто невозможно?
Ответы:
Добавьте заголовок Access-Control-Allow-Origin с сервера
http://en.wikipedia.org/wiki/Cross-Origin_Resource_Sharing
источник
Попробуйте JSONP.
большинство JS-библиотек делают это так же просто, как и другие вызовы AJAX, но внутренне используют iframe для выполнения запроса.
если вы не используете JSON для своей полезной нагрузки, вам придется использовать собственный механизм вокруг iframe.
лично я бы просто перенаправил страницу http: // на страницу https: //
источник
https:
http://example.com/ может разрешить виртуальный хост, отличный от https://example.com/ (который, поскольку заголовок Host не отправляется, отвечает на значение по умолчанию для этого IP-адреса), поэтому они рассматриваются как отдельные домены и, следовательно, подчиняются ограничениям междоменного JS.
Обратные вызовы JSON могут позволить вам избежать этого.
источник
Ознакомьтесь с проектом Forge с открытым исходным кодом. Он предоставляет реализацию TLS JavaScript, а также немного Flash для обработки фактических междоменных запросов:
http://github.com/digitalbazaar/forge/blob/master/README
Короче говоря, Forge позволит вам создавать запросы XmlHttpRequests с веб-страницы, загруженной через http, на сайт https. Вам нужно будет предоставить файл междоменной политики Flash через свой сервер, чтобы разрешить междоменные запросы. Просмотрите сообщения в блоге в конце README, чтобы получить более подробное объяснение того, как это работает.
Однако следует отметить, что Forge лучше подходит для запросов между двумя разными https-доменами. Причина в том, что существует потенциальная атака MiTM. Если вы загрузите JavaScript и Flash с незащищенного сайта, это может быть взломано. Наиболее безопасное использование - загрузить его с защищенного сайта, а затем использовать его для доступа к другим сайтам (безопасным или другим).
источник
Вы можете попытаться загрузить страницу https в iframe и направить все запросы ajax в / из кадра через какой-то мост, это обходной путь, но он может сработать (не уверен, наложит ли он те же ограничения доступа, учитывая безопасный контекст) . В противном случае приемлемым решением будет локальный http-прокси для перенаправления запросов (например, любых междоменных вызовов).
источник
Вот что я делаю:
Создайте скрытый iFrame с данными, которые вы хотите опубликовать. Поскольку вы по-прежнему контролируете этот iFrame, то же происхождение не применяется. Затем отправьте форму в этом iFrame на страницу ssl. Затем ssl-страница перенаправляется на не-ssl-страницу с сообщениями о состоянии. У вас есть доступ к iFrame.
источник