jQuery基本认证发送凭据错误

jQuery Basic Auth error sending credentials

本文关键字:错误 认证 jQuery      更新时间:2023-09-26

有一个问题,我"认为"凭证没有被设置,即使在beforeend中指定。所有设置都是动态的,包括头和基本认证(用于api文档)。

基本值被正确传递,即:"Basic XXXXXXXX"

服务器有Access-Control-Allow-Origin "*"

var $button = $(this).button('loading'),
    $parent = $(this).parents('.api-test-response:first'),
    $data = $('.api-test-data',$parent),
    headers = {};
 $('.api-test-headers tr',$parent).each(function(){
     if($('.header-toggle', this)[0].checked && $('input.api-test-header-key',this).val() != ""){
         headers[$('input.api-test-header-key',this).val()] = $('input.api-test-header-value',this).val();
     }
 });
 $.ajax({
  async: false,
  cache: false,
  crossDomain: true,
  headers: headers,
  beforeSend: function(xhr) {
    if(headers['Authorization']){
      xhr.withCredentials = true;
      xhr.setRequestHeader('Authorization', headers['Authorization']);                           
    }
    return true;
  },
  url: this.dataset.url,
  method: this.dataset.method || 'get',
  dataType: this.dataset.type || 'json',
  data: $data[0] ? $data[0].value : '',
  success: function(data, status, jqXHR){
    $('pre', $parent).removeClass('hide').find('code').html( !data ? status : data instanceof Object ? syntaxHighlight(data) : data );
  },
  error: function(jqXHR, status, error){
    $('pre', $parent).removeClass('hide').find('code').html( '<div class="badge badge-important">'+ jqXHR.status +'</div> ' + (jqXHR.responseText != '' ? jqXHR.responseText :  status + ' ' + error) );
  }
})
  .always(function (jqXhr) {
      $button.button('reset');
      $("body").scrollspy('refresh');
  })

chrome出现错误:

OPTIONS URL 401 (Unauthorized)
XMLHttpRequest cannot load URL. Invalid HTTP status code 401
Response : No Authorisation Provided 

原来是浏览器预飞行请求(选项)不包含认证头信息的问题,因此java服务失败。通过捕获并忽略选项请求解决了这个问题。