jQuery没有发送Authorization标头

时间:2015-02-25 20:36:39

标签: jquery ajax cors

由于某种原因,此代码未发送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"

2 个答案:

答案 0 :(得分:1)

啊 - 结果我的ElasticSearch实例已禁用CORS。据我了解,Chrome坚持发送OPTIONS请求,以便在发送POST本身之前查看是否允许跨域POST,以保护浏览器用户的安全。

通过手动修改请求并在Fiddler中添加Authorization标头,我能够跳过它。 (由于浏览器对OPTIONS的坚持,任何网站都无法通过javascript随意执行此操作,这就是我无法添加标题的原因。)

答案 1 :(得分:0)

为什么不使用username and password代替标题?