100% 動作する Chrome Postman に対して、WebSEAL で保護された RESTful サービスをテストしています。必要に応じて基本認証資格情報を渡し、要求を送信します。
ブラウザーには認証プロンプトが表示されず、応答は予期した結果をエラーなしで返します。
ただし、これを jQuery で実行してブラウザーで実行しようとすると、予期しない例外 CORS エラーやその他の認証 401 エラーが発生します。
私の意見では、Postman は、JavaScript で AJAX フレームワークを介して生成するのとまったく同じ XMLHttpRequest 文字列を生成しますが、Postman は成功しますが、通常の JavaScript は成功しません。
ここでの違いは何ですか?私は完全に途方に暮れています。
// jQuery
var authorization = basic_auth('username', 'password1'),
url = 'https://url.domain.name/service.svc';
$.ajax({
url: url,
method: 'GET',
xhrFields: {
withCredentials: true
},
beforeSend: function (req) {
req.setRequestHeader('Authorization', authorization);
req.setRequestHeader('Content-Type', 'application/json');
},
success: function (s) {
}
});
// XMLHttpRequest
var xml = new XMLHttpRequest(),
authorization = basic_auth('username', 'password1'),
url = 'https://url.domain.name/service.svc';
xml.open('GET', url, true);
xml.setRequestHeader('Authorization', authorization);
xml.setRequestHeader('Content-Type', 'application/json');
xml.setRequestHeader('Content-Length', 1000);
xml.onreadystatechange = function () {
xhrResult(httpRequest);
};
xml.send(null);
更新と解決
デフォルトでは、Chrome は localhost からの XS-XHR を許可しません。