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 的原因)。