HTTP身份验证在Android 4.x中无效

时间:2012-09-19 13:20:43

标签: android apache cordova http-authentication

我有一个phonegap应用程序。我查询需要HTTP基本身份验证的REST Web服务

这是我的代码:

var username = 'test';
var pass = 'test';
var string = username+':'+pass;
var hash = btoa(string);
$.ajax({
    type: 'GET',
    dataType: 'jsonp',
    crossdomain: true,
    //tried this
    beforeSend: function (xhr){ 
        xhr.setRequestHeader('Authorization', make_base_auth(username, pass)); 
    },
    //also this
    username: 'test',
    password: 'test',
    //also this
    data: {username: 'test', password: 'test'},
    //and this
    url: 'http://'+username+':'+pass+'@testserver.local/ProductService/getProductList.json?testQuery&_jsonp=availableProducts',
    error: function (xhr, ajaxOptions, thrownError) {
        console.warn(xhr.status);
        console.warn(thrownError);
        alert(xhr.status);
        alert(thrownError);
    }
    });

function make_base_auth(user, password) {
  var tok = user + ':' + password;
  var hash = btoa(tok);
  alert("HASH: "+hash);
  return "Basic " + hash;
}

我从服务器端知道的是,当我从Android 4.x查询时,apache说“用户尝试登录时没有凭据”。所以似乎没有数据到达服务器,但为什么呢?

奇怪的是,它适用于iPhone(iOS 4.1)和Android版本2.2和2.3,但不适用于4.x(4.0.4和4.1)。任何人都有任何提示,这让我发疯。

编辑:我能够查看apache访问日志,它在Android 4.x的每个请求中返回401,对于2.2和2.3之前的每个请求都返回200。我现在将记录所有HTTP请求标头以检查到达的内容。

0 个答案:

没有答案