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

Как сделать запрос перекрестного домена

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

Мои вопросы:

  • Что такое альтернативный вариант перекрестного домена для XMLHTTPRequest?
  • Как насчет WebSockets? Предоставляет ли эта технология запрос на перекрестный домен?

EDIT: Мне все еще не ясно...

Например, я вытаскиваю свою страницу с сайта www.domain1.com, и мне нужно запросить javascript с сайта www.domain2.com. Поэтому вытащенная страница должна включать что-то вроде:

<script src="www.domain2.com/script.js"></script>

чтобы избежать ограничений перекрестных доменов.

И я могу использовать JSONP, и запрос будет выглядеть так: http://ww.domain1.com/?callback=someFunction.js

Но: разве это не то же самое? Я просто вытаскиваю js из другого домена! Предотвращает ли это перекрестные ограничения?

4b9b3361

Ответ 1

Вы можете сделать запросы кросс-домена, используя объект XMLHttpRequest. Это делается с использованием "Cross Origin Resource Sharing". Видеть: http://en.wikipedia.org/wiki/Cross-origin_resource_sharing

Очень просто поставить, когда запрос сделан на сервер, сервер может ответить заголовком Access-Control-Allow-Origin, который либо разрешит, либо отклонит запрос. Браузеру необходимо проверить этот заголовок, и если он разрешен, он будет продолжен с процессом запроса. Если браузер не отменит запрос.

Здесь вы можете найти дополнительную информацию и рабочий пример: http://www.leggetter.co.uk/2010/03/12/making-cross-domain-javascript-requests-using-xmlhttprequest-or-xdomainrequest.html

JSONP - альтернативное решение, но вы можете поспорить с ним немного взломом.

Ответ 2

Сделайте междоменный вызов AJAX

Ваш веб-сервис должен поддерживать метод инъекции, чтобы сделать JSONP.

Ваш код кажется прекрасным, и он должен работать, если ваши веб-службы и веб-приложение размещены в одном домене.

Когда вы делаете $.ajax с dataType: 'jsonp', означающий, что jQuery фактически добавляет новый параметр к URL-адресу запроса.

Например, если ваш URL http://10.211.2.219:8080/SampleWebService/sample.do, то jQuery добавит? callback = {some_random_dynamically_generated_method}.

Этот метод более похож на прокси-сервер, фактически прикрепленный в объекте окна. Это ничего конкретного, но выглядит примерно так:

window.some_random_dynamically_generated_method = function(actualJsonpData) {
    //here actually has reference to the success function mentioned with $.ajax
    //so it just calls the success method like this: 
    successCallback(actualJsonData);
}

Для получения дополнительной информации проверьте следующее

http://json-p.org/

Сделать запрос JSONP с двумя доменами ajax с помощью jQuery

Ответ 3

Если вы готовы передать некоторые данные и что вам не нужно защищаться (любая общедоступная информация), вы можете использовать прокси-сервер CORS, это очень просто, вам не придется ничего менять в коде или на стороне сервера (особенно это не ваш сервер, как API Yahoo или OpenWeather). Я использовал его для получения JSON файлов с помощью XMLHttpRequest, и он отлично работал.