Ajax, используя https на странице http - PullRequest
98 голосов
/ 09 июля 2009

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

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

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

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

Ответы [ 6 ]

56 голосов
/ 10 мая 2011

Добавление заголовка Access-Control-Allow-Origin с сервера

Access-Control-Allow-Origin: https://www.mysite.com

http://en.wikipedia.org/wiki/Cross-Origin_Resource_Sharing

11 голосов
/ 09 июля 2009

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

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

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

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

8 голосов
/ 09 июля 2009

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

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

4 голосов
/ 23 июля 2010

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

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

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

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

2 голосов
/ 12 сентября 2011

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

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

2 голосов
/ 09 июля 2009

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

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