Доступ к веб-сервису из jQuery - перекрестный домен

Я пытаюсь запустить службу wcf из клиента jQuery

В частности, этот пример http://www.codeproject.com/KB/aspnet/WCF_JQUERY_ASMX.aspx#4

Все работает хорошо, когда веб-страница клиента находится в том же домене, что и служба

Как только я перемещаю веб-страницу клиента в другой домен, он ломается. Он не может достичь службы, и запрос не работает.

Это происходит для всех примеров: ASMX, REST и WCF

любые идеи, как получить этот рабочий крест daomain?

Ответ 1

Вы работаете против политики одинакового происхождения. Веб-служба, к которой вы обращаетесь, должна находиться в том же домене, что и jQuery script, который выполняет запрос. Эта политика применяется всеми браузерами для предотвращения, например, межсайтовых сценариев и атак на внедрение кода в веб-приложениях.

В нем есть различные способы, включая JSONP, Proxies или Flash.

Нам понадобится немного больше информации, прежде чем мы сможем предложить, какую технику вы должны использовать. Я предпочитаю JSONP. Но тем временем здесь немного света:

http://taossa.com/index.php/2007/02/08/same-origin-policy/

https://developer.mozilla.org/En/Same_origin_policy_for_JavaScript

Здесь пример использования JSONP:

url = "http://www.test.com/getData.php?callback=parseResults";

document.body.appendChild((function() {
    var newScript = document.createElement("script");
    newScript.type = "text/javascript";
    newScript.src = url;
    return newScript;
})());

function parseResults(data) {
    alert(data);
}

Ответ 2

Возможно, вы захотите проверить JSONP (JSON with Padding). Короче говоря, это связано с добавлением элемента script на страницу с URL-адресом веб-службы как src. Затем веб-служба обертывает JSON в качестве первого аргумента в функции обратного вызова, которая выполняется при анализе script.

Script элементы освобождаются от Same Origin Policy, вот как они могут обойти эту проблему.

Ответ 3

Как правило, вы не сможете; современные браузеры ограничивают это, предотвращая атаки межсайтового скриптинга. Одним из способов может быть использование "дополненного" JSON, JSONP, который вставляет результаты в элемент script на вашей странице. Здесь образец Microsoft WCF, который, похоже, делает это.

Ответ 4

Я столкнулся с той же проблемой в течение 2 дней, и я нашел решение, и он был элегантным после многопользовательской игры. Мне нужен xss Ajax для некоторых клиентов виджета, которые вытаскивают потоки данных из ярусов в мое приложение Rails. здесь, как я это сделал.