如何在AJAX请求具有无效证书的服务器时抑制SSL错误

bel*_*ykh 5 javascript ajax ssl firefox internet-explorer

我有这个代码:

function newXMLHttpRequest() {
    var xmlHttp;
    try {
        xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
        try {
            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (f) {
            xmlHttp = new XMLHttpRequest();
        }
    }
    return xmlHttp;
}
var xmlHttp = newXMLHttpRequest();
xmlHttp.open("POST", url, true);
xmlHttp.onreadystatechange = function() {
    // this I have xmlHttp.status = 12019        
    alert("readyState = " + xmlHttp.readyState + "\nstatus = " + xmlHttp.status);
}
xmlHttp.send('same data');
Run Code Online (Sandbox Code Playgroud)

当我向服务器发送无效证书的请求时,我的错误状态代码为12019.

解决方案应该是跨浏览器(IE,FF,Chrome)

kly*_*lyd 1

首先回答一下标题中的问题,这是不可能的。客户端 xmlHttp 库不允许客户端忽略 ssl 错误。该MsXml2.ServerXMLHTTP 对象确实允许使用setOption(2, 13056) 方法忽略 SSL 错误。然而,这个对象不能在浏览器内使用,也不是跨平台的。

话虽如此,似乎还有另一个问题。12019状态并不表示认证无效。在这种情况下,可能会出现HTTP 403 状态代码的某种变体,或者许多“无效认证”代码之一。

您的12019 状态代码表示:

ERROR_INTERNET_INCORRECT_HANDLE_STATE

12019

无法执行请求的操作,因为提供的句柄状态不正确。

不幸的是,这个状态代码并没有真正传达太多信息,并且在不知道 IE 版本以及有关服务器的详细信息的情况下,没有更多内容可以继续。我查了很多论坛帖子。一位表示切换到 IIS 解决了该问题,另一位表示无法覆盖的临时文件导致了该问题。然而,大多数帖子都没有令人满意的或决定性的结论。