jQuery 未发送授权 header
jQuery not sending Authorization header
出于某种原因,此代码未发送授权 header。这是为什么?有其他选择吗?
$.ajax({
type: "POST",
data: JSON.stringify(q),
url: "https://elasticsearchinstance" + "/index/_search",
contentType: 'application/json',
crossDomain: true,
dataType: 'json',
processData: false,
headers: {
"Authorization": "Basic " + btoa("username:password")
},
success: searchCallback
});
401 Unauthorized
如果我在 Fiddler 中手动编辑请求以添加授权 header,我会收到 HTTP 200。
编辑 - 包括这个也无济于事:
beforeSend: function (xhr) {
xhr.setRequestHeader ("Authorization", "Basic " +btoa("username:password"));
},
编辑 - 用户名和密码也无效:
username: "username",
password: "password"
为什么不使用 username and password 而不是 headers?
啊 - 原来我的 ElasticSearch 实例禁用了 CORS。据我了解,Chrome坚持在发送POST本身之前发送一个OPTIONS请求以查看是否允许cross-domain POST,以保护浏览器用户的安全.
通过手动修改请求并在 Fiddler 中添加授权 header,我可以跳过它。 (由于浏览器对 OPTIONS 的坚持,没有网站可以任意地通过 javascript 做到这一点,这就是为什么我无法添加 header 的原因)。
出于某种原因,此代码未发送授权 header。这是为什么?有其他选择吗?
$.ajax({
type: "POST",
data: JSON.stringify(q),
url: "https://elasticsearchinstance" + "/index/_search",
contentType: 'application/json',
crossDomain: true,
dataType: 'json',
processData: false,
headers: {
"Authorization": "Basic " + btoa("username:password")
},
success: searchCallback
});
401 Unauthorized
如果我在 Fiddler 中手动编辑请求以添加授权 header,我会收到 HTTP 200。
编辑 - 包括这个也无济于事:
beforeSend: function (xhr) {
xhr.setRequestHeader ("Authorization", "Basic " +btoa("username:password"));
},
编辑 - 用户名和密码也无效:
username: "username",
password: "password"
为什么不使用 username and password 而不是 headers?
啊 - 原来我的 ElasticSearch 实例禁用了 CORS。据我了解,Chrome坚持在发送POST本身之前发送一个OPTIONS请求以查看是否允许cross-domain POST,以保护浏览器用户的安全.
通过手动修改请求并在 Fiddler 中添加授权 header,我可以跳过它。 (由于浏览器对 OPTIONS 的坚持,没有网站可以任意地通过 javascript 做到这一点,这就是为什么我无法添加 header 的原因)。