2013-07-26 2 views
29

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

Мои вопросы:

  1. Какова альтернатива кросс домен XMLHTTPRequest?
  2. Что касается 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 из другого домена! Предотвращает ли это перекрестные ограничения?

+0

[Эта статья о MDN достаточно хорошо объясняет проблему и решения] (https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS) – Liam

ответ

4

ли междоменная 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/

Make cross-domain ajax JSONP request with jQuery

+0

да, спасибо. Но можете ли вы дать ответ на вопрос ID EDIT, пожалуйста, –

18

Вы можете сделать запросы Междоменных с помощью 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 является альтернативным решением, но можно утверждать, что это немного рубить.

+0

Я бы сказал, что это тоже немного взломать. Хотя я не использую его! : D –

3

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