我正在针对 100% 工作的 Chrome Postman 测试 WebSEAL 安全的 RESTful 服务。我根据需要传入基本身份验证凭据并发送请求。
浏览器无授权提示,响应无误返回预期结果。
但是,当我尝试在 jQuery 中执行此操作并通过浏览器运行它时,我一无所获,出现异常 CORS 错误和其他我没想到的授权 401 错误。
在我看来,Postman 生成的 XMLHttpRequest 字符串与我通过 JavaScript 中的任何 AJAX 框架生成的字符串完全相同,但 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 不允许来自本地主机的 XS-XHR。