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

Вопрос о запросе ajax междоменного (субдомена)

Скажем, у меня есть главная страница, загруженная из http://www.example.com/index.html. На этой странице есть js-код, который делает запрос ajax http://n1.example.com//echo?message=hello. Когда ответ получен, div на главной странице обновляется с телом ответа.

Будет ли это работать на всех популярных браузерах?

Edit:

Очевидным решением является установка прокси-сервера перед www.example.com и n1.example.com и его настройка таким образом, чтобы каждый запрос отправлялся в подресурс http://www.example.com/n1 проксируется на http://n1.example.com/.

4b9b3361

Ответ 1

Перекрестный домен - это совсем другой предмет. Но кросс-поддомен относительно прост. Все, что вам нужно сделать, это установить для document.domain одинаковое значение как на родительской странице, так и на странице iframe.

document.domain = "yourdomain.com"

Подробнее здесь

Ответ 2

Еще одно решение, которое может или не может работать для вас, - это динамически вставлять/удалять теги script в DOM, указывающие на целевой домен. Это будет работать, если цель возвращает json и поддерживает обратный вызов.

Функция для обработки результата:

<script type="text/javascript">
  function foo(result) {
    alert( result );
  }
</script>

Вместо выполнения запроса AJAX вы динамически вставляете что-то вроде этого:

<script type="text/javascript" src="http://n1.example.com/echo?callback=foo"></script>

Ответ 3

Все современные браузеры поддерживают CORS, и впредь мы должны использовать это дополнение.

Он работает на простой технике рукопожатия, поскольку 2 домена обмениваются доверием друг с другом посредством HTTP-заголовков, отправленных/полученных. Это было долгождано, поскольку одна и та же политика происхождения была необходима, чтобы избежать XSS и других вредоносных попыток.

Чтобы инициировать запрос перекрестного происхождения, браузер отправляет запрос с HTTP-заголовком Origin. Значение этого заголовка - это сайт, который обслуживал страницу. Например, предположим, что страница http://www.example-social-network.com пытается получить доступ к пользовательским данным в онлайн-альбоме -calendar.com. Если пользовательский браузер реализует CORS, будет отправлен следующий заголовок запроса:

Происхождение: http://www.example-social-network.com

Если online-personal-calendar.com разрешает запрос, он отправляет заголовок Access-Control-Allow-Origin в свой ответ. Значение заголовка указывает, какие исходные сайты разрешены. Например, ответ на предыдущий запрос будет содержать следующее:

Access-Control-Allow-Origin: http://www.example-social-network.com

Если сервер не разрешает запрос перекрестного происхождения, браузер отправит сообщение на страницу example-social-network.com вместо ответа on-line-calendar.com.

Чтобы разрешить доступ ко всем страницам, сервер может отправить следующий заголовок ответа:

Access-Control-Allow-Origin: *

Однако это может оказаться неприемлемым для ситуаций, в которых проблема безопасности.

Очень хорошо объяснено здесь на странице wiki. http://en.wikipedia.org/wiki/Cross-origin_resource_sharing

Ответ 4

Другим обходным путем является направить запрос ajax на страницу php (например) в вашем домене и на этой странице сделать запрос cURL в подобласте.

Ответ 5

Новая идея: если вы хотите перекрестный субдомен (www.domain.com и sub.domain.com), и вы работаете над apache. вещи могут стать намного проще. если субдомен фактически является подкаталогом в public_html (sub.domain.com = www.domain.com/sub/. поэтому, если у вас есть ajax.domain.com/?request=subject..., вы можете сделать что-то вроде этого: www.domain.com/Ajax/? = запрос при условии

работает как прелесть для меня, и нет глупых хаков, прокси или сложных вещей, которые нужно сделать только для нескольких запросов Ajax!

Ответ 6

Самое простое решение, которое я нашел, это создать php для вашего поддомена и включить в него исходный файл функции с полным путем.

Пример:

www.domain.com/ajax/this_is_where_the_php_is_called.php

субдомен:

sub.domain.com

Создать: sub.domain.com/I_need_the_function.php

Внутри I_need_the_function.php просто используйте include:

include_once ( "/сервер/путь/public_html/Ajax/this_is_where_the_php_is_called.php" );

Теперь вызовите sub.domain.com/I_need_the_function.php из вашего javascript.

var sub="";
switch(window.location.hostname)
{
case "www.domain.com":
sub = "/ajax/this_is_where_the_php_is_called.php";
break;
case "domain.com":
sub = "";
break;
default: ///your subdomain (or add more "case" 's)
sub = "/I_need_the_function.php";
}


xmlHttp.open("GET",sub,true);

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

Надеюсь, это поможет кому-то. Здесь нет ничего грязного, и вы вызываете исходный файл, поэтому любые изменения будут применяться ко всем функциям.

Ответ 7

Я написал решение для кросс-субдомен и работал над моими приложениями. Я использовал iframe и установил document.domain = "domain.com" с обеих сторон. Вы можете найти мое решение по адресу:

https://github.com/emphaticsunshine/Cross-sub-domain-solution