由于某种原因,此代码未发送Authorization标头。这是为什么?还有其他选择吗?
$.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中手动编辑请求以添加Authorization标头,我会收到HTTP 200。
编辑 - 包括这也无济于事:
beforeSend: function (xhr) {
xhr.setRequestHeader ("Authorization", "Basic " +btoa("username:password"));
},
编辑 - 用户名和密码也无效:
username: "username",
password: "password"
答案 0 :(得分:1)
啊 - 结果我的ElasticSearch实例已禁用CORS。据我了解,Chrome坚持发送OPTIONS请求,以便在发送POST本身之前查看是否允许跨域POST,以保护浏览器用户的安全。
通过手动修改请求并在Fiddler中添加Authorization标头,我能够跳过它。 (由于浏览器对OPTIONS的坚持,任何网站都无法通过javascript随意执行此操作,这就是我无法添加标题的原因。)
答案 1 :(得分:0)
为什么不使用username and password代替标题?