Javascript 401在3G上提示,但在Wi-Fi上不提示-XMLHttpRequestoverSSL,具有基本身份验证、硬编码凭据

Javascript 401在3G上提示,但在Wi-Fi上不提示-XMLHttpRequestoverSSL,具有基本身份验证、硬编码凭据,javascript,ajax,authentication,ssl,xmlhttprequest,Javascript,Ajax,Authentication,Ssl,Xmlhttprequest,我有一个XmlHttpRequest,它使用硬编码凭据进行基本身份验证。网站(HTML/CSS/JavaScript)本身已经使用客户端证书进行了身份验证,因此我宁愿在调用web服务时使用匿名身份验证,但它返回带有http200/OK代码的空数据集。我还尝试使用与网站相同的客户端证书,但它也返回空数据集,尽管有HTTP 200/OK代码。当我将其设置为使用基本身份验证时,将返回完整的数据集。所以,看起来我可能会被Basic卡住。下面是一个简单的请求: var xmlhttp = new XMLH

我有一个XmlHttpRequest,它使用硬编码凭据进行基本身份验证。网站(HTML/CSS/JavaScript)本身已经使用客户端证书进行了身份验证,因此我宁愿在调用web服务时使用匿名身份验证,但它返回带有http200/OK代码的空数据集。我还尝试使用与网站相同的客户端证书,但它也返回空数据集,尽管有HTTP 200/OK代码。当我将其设置为使用基本身份验证时,将返回完整的数据集。所以,看起来我可能会被Basic卡住。下面是一个简单的请求:

var xmlhttp = new XMLHttpRequest();
xmlhttp.open('POST', 'https://foo.bar.com:5443/WebServices/Web.svc', true, username, password);

var sr = '<Envelope>' + 
        '<Body>' + 
        '<Method>' + 
            '<parameterlist>' + 
                '<parameter>param_1</parameter>' + 
            '</parameterlist>' + 
        '</Method>' + 
    '</Body>' + 
    '</Envelope>';

xmlhttp.onreadystatechange = function () {
    if (xmlhttp.readyState == 4) {
         if (xmlhttp.status == 200) {
           //successful
         }
     }
};

xmlhttp.setRequestHeader('SOAPAction', '\"http://SOAPAction\"');
xmlhttp.setRequestHeader('Content-Type', 'text/xml;charset=UTF-8');
xmlhttp.setRequestHeader('Cache-Control', 'no-cache');
xmlhttp.send(sr);
然而,当我使用3G连接时,或者当Wifi连接速度较慢时,我总是会收到401挑战提示。我不知道为什么在较慢的连接上会有所不同。理想情况下,401提示符永远不会出现


我知道解决这个问题的一种方法是使用web服务代理,但我找不到任何关于如何实现一个非常简单的代理的示例。我从未创建过web服务代理,如果这是我唯一的选择,我可以使用一些指导来实现一个非常简单的实现。

我仍然不能完全确定为什么会发生这种情况,但我能够用发布的方法修复它

它只使用Base64.js从用户名和密码创建一个散列,并将其传递到授权头中

xmlhttp.setRequestHeader('Authorization', auth);
我从.open()中删除了用户名和密码:

服务器根本不发送任何401挑战。它直接导致200状态,这意味着数据加载速度更快

xmlhttp.setRequestHeader('Authorization', auth);
xmlhttp.open('POST', 'https://foo.bar.com:5443/WebServices/Web.svc', true);