Доступ к веб-сервису из jQuery - кросс-домен - PullRequest
18 голосов
/ 23 апреля 2010

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

Конкретно этот пример http://www.codeproject.com/KB/aspnet/WCF_JQUERY_ASMX.aspx#4

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

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

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

есть идеи, как получить этот рабочий кросс-домен?

Ответы [ 4 ]

10 голосов
/ 23 апреля 2010

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

Существуют различные способы обойти это, включая 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);
}
1 голос
/ 23 апреля 2010

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

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

0 голосов
/ 27 августа 2010

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

0 голосов
/ 23 апреля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...