JQueryを使用して通信しようとしているRESTベースのサーバーがあります。 XMLとJSONの両方をレスポンス形式として利用できるため、JSONを使用しています。JQuery AjaxがHTTP基本認証で呼び出す
HTTP基本認証を選択した私たちの認証方式となっている、と私たちは他のフロントエンドには問題ありませんでしたしているので、接続がすべてSSLある(生のJavascript、シルバー、など...)
今、私がしようとしていますJQueryと一緒に何かを入れ、HTTP基本認証を使用して無限の問題を抱えています。
私は多くの前回の質問の多くは、実際に動作していないか、または基本的なJavascriptテストですでに克服しているクロスオリジンアクセスの問題全体を責めているソリューションを持っています。応答では、要求の中で提供されたOriginヘッダーに常にAccess-Control-Allow-Origin
が設定されています。これは私のテストの応答で見ることができます。基本的なJavaScriptで
は、この全体の呼び出しは非常に単純で達成される:
req.open('GET', 'https://researchdev-vm:8111/card', true, 'test', 'testpassword');
この時はJQueryの試みはかなり標準的である:
$.ajax({
username: 'test',
password: 'testpassword',
url: 'https://researchdev-vm:8111/card',
type: 'GET',
dataType: 'json',
crossDomain: true,
/*data: { username: 'test', password: 'testpassword' },*/
beforeSend: function(xhr){
xhr.setRequestHeader("Authorization",
//"Basic " + encodeBase64(username + ":" + password));
"Basic AAAAAAAAAAAAAAAAAAA=");
},
sucess: function(result) {
out('done');
}
});
実際に提供するために動作するようです唯一の方法認証は、beforeSend()
関数でBase64でエンコードされたデータを直接挿入することです。これが含まれていない場合は、何も進展がありません。ユーザー名とパスワードのプロパティは完全に無視されるようです。
beforeSend()
ビヘイビアが指定されている場合、GETコールはデータを含む肯定応答を返します。ただし、これはクロスサイトコールなので、OPTIONS呼び出しはGET呼び出しより先に実行され、beforeSend()
を使用しないため、失敗した認証のために401応答を取得するため、常に失敗します。
非常に簡単な呼び出しを行うには、より良い方法がありますか? OPTIONS要求がbeforeSend()
関数の処理を利用しないという事実はバグとみなされるべきですか?おそらくOPTIONSチェックを完全に無効にする方法はありますか? Javascriptは「クロスサイト」と同じマシン上の異なるポート番号を考慮しているように見えるので、この呼び出しをクロスサイトではできません。
あなたが前に送信し、ユーザー名/パスワードのフィールドを持っている必要はありません。あなたの$ .ajax関数からユーザー名/パスワードフィールドを削除します。 –