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

AJAX, субдомены и SSL

У меня есть сайт, foo.com, который делает запросы ajax на bar.foo.com. Будет ли это работать.

Кроме того, если foo - это безопасное соединение, https, то bar.foo.com тоже должен быть https? Могут ли эти два сайта использовать разные сертификаты?

4b9b3361

Ответ 1

С plain-http AJAX: вы говорите о междоменном XMLHttpRequest, который не разрешен браузерами. Там ожидается Подпространство (которое использует iframes и document.domain), метод идентификации фрагмента (опять же, использует iframes) и window.name technique (опять же, плавающие фреймы!).

Что касается SSL, вы можете приобрести отдельные сертификаты для домена и субдомена или одного сертификата подстановочного знака (*.foo.com), который охватывает их обоих (естественно, подстановочный сертификат будет стоить дороже).

Если у вас есть страница HTTPS, которая запрашивает элементы из других доменов, все будет хорошо, пока все HTTPS. Это означает, что если вы используете одно из обходных путей iframe, вам нужно указать URL-адрес схемы https:// в атрибуте src iframe.

Конечным, менее эффективным, обходным путем является наличие script на https://foo.com, который проксирует запросы на неуверенность http://bar.foo.com. (Это также решает проблему кросс-домена XHR, поэтому вы можете игнорировать другие обходные пути.) Конечно, это означает, что вы отправляете запрос XHR на https://foo.com/someurl, затем нажимаете http://bar.foo.com/someurl, получая ответ и отправляя его вернемся к браузеру, поэтому с точки зрения производительности вам гораздо лучше просто переместить серверную функциональность bar.foo.com на foo.com, если у вас есть эта опция. Но если вы не можете переместить сервер script, тогда проксирование - это путь.

EDIT: Я изменил последние 3 графа после выполнения дополнительного тестирования и получил обходное решение iframe AJAX (#fragmentidentifier) ​​для работы в разных доменах HTTPS. Вы можете использовать межсетевой AJAX SSL, используя iframes, если все https, а схема https используется в iframe src. Подведение итогов:

  • Короткий ответ: нет, истинный междоменный XHR не разрешен
  • Временное решение iframes: более эффективный, требуется 2 SSL certs (или подстановочный знак), несколько сложный
  • Обходной путь с прокси: менее эффективный, может работать с 1 или 2 SSL-сертификаты (1 с бэкэнд-запросом на bar.foo.com через http), несколько сложный

Ответ 2

Большинство браузеров, в зависимости от настроек безопасности/конфиденциальности, блокируют любые внешние вызовы - и разрешают только вызовы AJAX, сделанные в том же домене. Даже субдомены блокируются, потому что в общих средах они могут представлять реальную угрозу.

Вкратце: только вызовы AJAX через один и тот же домен (возможно, вызовите страницу, которая, в свою очередь, вызывает другую страницу из другого домена - через curl/fopen/...), или вы столкнетесь с проблемами. Это также отвечает на ваш вопрос SSL - неважно, какой SSL вы используете, или же они одинаковые - вызовы будут заблокированы, несмотря на SSL.

Ответ 3

Да, вы можете получить разные сертификаты для обоих доменов. Все это в том, как вы решили настроить его.

Вы можете настроить веб-сервер для foo.com, и вы можете открыть порт 80 для безопасности и порт 443 для обеспечения безопасности и использовать оба.

Вы можете настроить другой веб-сервер для bar.foo.com и выполнить те же конфигурации портов.

Если вам нужно убедиться, что вы защищены от обоих, вам необходимо получить сертификаты для каждого другого домена.

Возможно, вы сможете приобрести сертификат *.foo.com, который позволит вам скопировать один сертификат на другой сайт и использовать его.

Независимо от того, что ваш запрос ссылается на http://bar.foo.com, у вас не будет безопасного соединения.

У вас должен быть http "s", чтобы сообщить веб-серверу использовать порт 443 и попытаться проверить сертификат.

Все сертификаты действительно говорят, что источнику доверяют. Даже если ему не доверяют, и вы используете http "s", и в браузере есть блокировка, ваши данные все равно зашифровываются.

Ответ 4

Вы можете комбинировать JavaScript TLS и Flash для выполнения безопасных междоменных запросов. Таким образом, ваши посетители перейдут на https://foo.com, и вы можете сделать XmlHttpRequests https://bar.foo.com. Вы можете сделать то же самое с обычным http.

Вам нужно будет приобрести SSL-сертификат, который будет доверять вашим посетителям браузерам для foo.com, но вы можете создавать свои собственные SSL-сертификаты для bar.foo.com, bar2.foo.com и т.д. Более дорогая альтернатива создание собственных SSL-сертификатов (бесплатно) заключается в покупке подстановочного SSL-сертификата для *.foo.com. Но если вы выполняете междоменные запросы на эти сайты через foo.com, вам не нужно тратить лишние деньги.

Проверьте проект Forge с открытым исходным кодом на github:

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

Ссылки в блоге в конце содержат более подробное объяснение.

Ответ 5

Да, вы, безусловно, можете сделать перекрестный домен ajax. Мы выполнили ту же настройку, используя сертификат подстановки ssl.com, но вы можете использовать 2 стандартных сертификата на двух сайтах.

В основном вы используете JSONP (yahoo, google, fb и т.д.). Возвращаемое значение обернуто в функцию amd выглядит как

someFunction("{...}");