0

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 を許可しません。

4

0 に答える 0