如何将基本身份验证 header 分配给 XMLHTTPREQUEST?
How to assign basic authentication header to XMLHTTPREQUEST?
我已经阅读了很多关于 preflight 和 CORS 的答案,所以请不要 post 链接引用我应该阅读的内容。许多答案来自server-perspective,但我是本案的客户。我是否设置原点 header?我的假设是这是一个简单的请求,对吗?
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();
但是还是不行,我的错误:
Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access. The response had HTTP status code 500.
如果要设置授权头
req.setRequestHeader('Authorization','Basic ' + Base64StringOfUserColonPassword);
解决方案:
var req = new XMLHttpRequest();
req.setRequestHeader('Authorization', 'Basic [base64 encoded password here]' );
如果将此用于 API 请求,添加授权 header 将首先使 XMLHttpRequest 发送一个 OPTIONS 请求,这可能会被一些 API 拒绝。
要解决这个问题,您还可以这样做:
var invocation = new XMLHttpRequest();
invocation.open("GET", url, true, username, password);
invocation.withCredentials = true;
这将添加授权 header 并避免预检请求。
这个 post 很旧,但可以为遇到它的其他人回答。
您的授权没有问题header。您遇到的问题与 CORS 相关。
您没有自己设置 Origin header。浏览器会为您做到这一点。如果你的 origin 是 null 那么我怀疑这是因为你是 运行 你的代码来自 file:///
而不是 http://
.
我已经阅读了很多关于 preflight 和 CORS 的答案,所以请不要 post 链接引用我应该阅读的内容。许多答案来自server-perspective,但我是本案的客户。我是否设置原点 header?我的假设是这是一个简单的请求,对吗?
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();
但是还是不行,我的错误:
Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access. The response had HTTP status code 500.
如果要设置授权头
req.setRequestHeader('Authorization','Basic ' + Base64StringOfUserColonPassword);
解决方案:
var req = new XMLHttpRequest();
req.setRequestHeader('Authorization', 'Basic [base64 encoded password here]' );
如果将此用于 API 请求,添加授权 header 将首先使 XMLHttpRequest 发送一个 OPTIONS 请求,这可能会被一些 API 拒绝。
要解决这个问题,您还可以这样做:
var invocation = new XMLHttpRequest();
invocation.open("GET", url, true, username, password);
invocation.withCredentials = true;
这将添加授权 header 并避免预检请求。
这个 post 很旧,但可以为遇到它的其他人回答。
您的授权没有问题header。您遇到的问题与 CORS 相关。
您没有自己设置 Origin header。浏览器会为您做到这一点。如果你的 origin 是 null 那么我怀疑这是因为你是 运行 你的代码来自 file:///
而不是 http://
.