如何将基本身份验证标头分配给XMLHTTPREQUEST?

时间:2015-11-03 17:09:31

标签: javascript restful-authentication xmlhttprequest

我已经阅读了许多关于预检和CORS的答案,所以请不要发布引用我应该阅读的内容的链接。许多答案来自服务器视角,但在这种情况下我是客户端。我是否设置了原始标题?我的假设是这是一个简单的请求,我是对的吗?

 req.open("POST", url, true);
 req.setRequestHeader( 'Content-Type',   'application/blahblah' );
 req.setRequestHeader( 'Accept', 'application/blahblah' );
 req.setRequestHeader("Authorization", "Basic " + btoa(user + ":" + pass)); 
 req.send();

然而它仍然不起作用,我的错误:

  

对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此不允许原点'null'访问。响应的HTTP状态代码为500。

4 个答案:

答案 0 :(得分:13)

如果要设置授权标题

req.setRequestHeader('Authorization','Basic ' + Base64StringOfUserColonPassword);

答案 1 :(得分:7)

解决方案:

req.setRequestHeader('Authorization', 'Basic [base64 encoded password here]' );

答案 2 :(得分:5)

这篇文章已经过时了,但回答了遇到它的任何其他人。

您的授权标头没有任何问题。您遇到的问题是CORS相关。

您不必自己设置Origin标头。浏览器为您做到了这一点。如果您的来源为空,那么我怀疑这是因为您从file:///而不是http://运行代码。

答案 3 :(得分:4)

如果将此用作API请求,添加Authorization标头将首先使XMLHttpRequest发送OPTIONS请求,某些API可能会拒绝该请求。

要解决这个问题,你也可以这样做:

var invocation = new XMLHttpRequest();
invocation.open("GET", url, true, username, password);
invocation.withCredentials = true;

这将添加Authorization标头并避免预检请求。