web-dev-qa-db-ja.com

jQueryからWebサービスにアクセスする-クロスドメイン

JQueryクライアントからwcfサービスにアクセスしようとしています

具体的には、この例 http://www.codeproject.com/KB/aspnet/WCF_JQUERY_ASMX.aspx#4

クライアントのウェブページがサービスと同じドメインにある場合、すべてがうまく機能します

クライアントのウェブページを別のドメインに移動するとすぐに壊れます。サービスに到達できず、リクエストは失敗します

これは、ASMX、REST、およびWCF)のすべての例で発生します。

このクロスダオマインを機能させる方法はありますか?

18
ChrisCa

同一生成元ポリシーに違反しています。アクセスしているWebサービスは、リクエストを行っているjQueryスクリプトと同じドメインに存在する必要があります。このポリシーは、Webアプリケーションに対するクロスサイトスクリプティングやコードインジェクション攻撃を防ぐために、すべてのブラウザによって適用されます。

JSONP、プロキシ、フラッシュなど、さまざまな方法があります。

使用するテクニックを提案する前に、もう少し情報が必要です。私は [〜#〜] 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);
}
10
GlenCrawford

チェックアウトすることをお勧めします JSONP(JSON with Padding) 。つまり、WebサービスのURLをsrcとして、スクリプト要素をページに追加する必要があります。次に、Webサービスは、スクリプトが解析されるときに実行されるコールバック関数の最初の引数としてJSONをラップします。

スクリプト要素は 同一生成元ポリシー から免除されます。これにより、この問題を回避できます。

1
Andy E

私は2日間同じ問題に直面し、解決策を見つけました。たくさんグーグルした後、それはエレガントです。ティアのウェブサイトから私のRailsアプリ。 これが私のやり方です。

0
R Francky

通常、次のことはできません。最新のブラウザは、クロスサイトスクリプティング攻撃を防ぐためにこれを制限しています。これを回避する1つの方法は、「パッド付き」JSON、JSONPを使用することです。これにより、結果がページのスクリプト要素に挿入されます。 ここにMicrosoft WCFサンプル があります。これはそうしているようです。

0
Matt Gibson