2012-02-28 13 views
5

私は、ローカル(ファイル://アクセス)htmlアプリケーションから.NET WCFドメインサービスのクロスドメイン使用を調べています。アプリは、AJAX呼び出しのためにjQueryを使用しています。jQuery.Ajax "制限付きURIへのアクセスが拒否されました"という説明はありますか?

サーバ上での認証(つまり匿名認証)を行わないと、CORSの "Access-Control-Allow-Origin:*"ヘッダーとJSONPフォーマットのデータをJSON形式で正常に取得できました。

ここでは、認証とCORSヘッダーがJSON(JSONPではなく)形式のデータである場合の動作を理解しようとしています。

次のjQueryコードはサーバーにリクエストを送信し、サーバーは「HTTP/1.1 401 Unauthorized」で応答します。

$.ajax({ 
    url: myUrl, 
    dataType: 'json', 
    cache: false, 
    complete: function() { /* do stuff */ }, 
    timeout: 5000, 
    data: myData 
}); 

次のjQueryコード

は、サーバーへのリクエストを行い、すぐに「制限されたURIへのアクセスが拒否された」例外をスローし、コード1012

$.ajax({ 
    url: myUrl, 
    dataType: 'json', 
    cache: false, 
    complete: function() { /* do stuff */ }, 
    timeout: 5000, 
    username: "chris", 
    password: "password", 
    data: myData 
}); 

私が理解し、最初のケースを期待していません。誰も私に2番目の場合の例外を説明することはできますか?私はその要求が少なくとも期待されるだろう。

編集:Grrr、これはFF 10.0.2です。 Chromeは私が期待しているように行動するようですが、これはFFの問題ですか?

答えて

0

あなたはこれを克服するために、コールバック関数を使用することができます。 http://docs.jquery.com/Ajax/jQuery.ajax#options

+0

私は、jQuery.ajaxコールバック関数の1つでエラーを捕捉できること、またはJSONPでコールバック関数を使用することができることを実感しました。私の質問は本当になぜ(おそらくFirefoxだけ)要求をしないで、代わりにこの正確なシナリオでエラーが発生します。 – Chris

5

あなたはクッキーなどの資格情報を使用した場合、またはHTTP基本認証のユーザー名/パスワードのフィールドは、あなたのクロスオリジン・リクエストで、あなたも「withCredentialsを設定する必要がありますXHRのフラグをtrueに設定します。 jQueryでは、これは$ .ajax呼び出しのxhrFieldsプロパティで行います。また

$.ajax({ 
    url: myUrl, 
    dataType: 'json', 
    cache: false, 
    complete: function() { /* do stuff */ }, 
    timeout: 5000, 
    username: "chris", 
    password: "password", 
    data: myData, 
    xhrFields: { withCredentials: true } 
}); 

を読むためにあなたのコードを変更し、もう一方の端のサーバーは、資格情報を使用してアクセス制御 - 許可 - オリジンヘッダーのために「*」を使用することはできません。代わりに、送信されたOriginヘッダーと完全に一致するものを提供する必要があります。

関連する問題