JavaScript网络调用(例如fetch或XMLHttpRequest)或任何其他类型的HTTP网络请求在HTTP状态代码为0时失败是什么意思?
这似乎不是有效的HTTP状态代码,因为其他代码在HTTP规范中是三位数.
我尝试完全拔掉网络作为测试.它可能是不相关的,但导致状态代码17003(IIRC),粗略搜索建议意味着"DNS服务器查找失败".
相同的代码可以在某些位置和系统中正常工作,但在某些环境中,它会因状态代码0而失败,并且没有提供responseText.
这是Internet URL的典型HTTP POST.它不涉及file://我理解可能会返回0表示在Firefox中成功.
我一直在做很多研究,但找不到办法解决这个问题.我正在尝试从https服务器执行jQuery ajax调用到运行带有自定义自签名证书的jetty的locahost https服务器.我的问题是我无法确定响应是拒绝连接还是不安全响应(由于缺少证书接受).有没有办法确定两种情景之间的差异?的responseText,并且statusCode总是在这两种情况下是相同的,即使在Chrome控制台我可以看到一个区别:
net::ERR_INSECURE_RESPONSE
net::ERR_CONNECTION_REFUSED
Run Code Online (Sandbox Code Playgroud)
responseText总是""并且statusCode对于两种情况总是"0".
我的问题是,如何确定jQuery ajax调用是否因为ERR_INSECURE_RESPONSE或由于ERR_CONNECTION_REFUSED?而失败?
一旦证书被接受,一切正常,但我想知道本地主机服务器是关闭,还是启动并运行,但证书尚未被接受.
$.ajax({
type: 'GET',
url: "https://localhost/custom/server/",
dataType: "json",
async: true,
success: function (response) {
//do something
},
error: function (xhr, textStatus, errorThrown) {
console.log(xhr, textStatus, errorThrown); //always the same for refused and insecure responses.
}
});
Run Code Online (Sandbox Code Playgroud)

即使手动执行请求,我也会得到相同的结果:
var request = new XMLHttpRequest();
request.open('GET', "https://localhost/custom/server/", true);
request.onload = function () {
console.log(request.responseText);
};
request.onerror = function () {
console.log(request.responseText);
};
request.send();
Run Code Online (Sandbox Code Playgroud) 无法使用XMLHttpRequest获取数据(状态0和responseText为空):
xmlhttp=new XMLHttpRequest();
xmlhttp.open("GET","http://www.w3schools.com/XML/cd_catalog.xml", true);
xmlhttp.onreadystatechange=function()
{
if(xmlhttp.readyState==4)
alert("status " + xmlhttp.status);
}
xmlhttp.send();
它警告"状态0".
与localhost请求相同的情况(cd_catalog.xml保存为本地文件)
xmlhttp.open("GET","http://localhost/cd_catalog.xml", true);
但是使用localhost IP请求
xmlhttp.open("GET","http://127.0.0.1/cd_catalog.xml", true);
并使用本地文件请求
xmlhttp.open("GET","cd_catalog.xml", true);
一切都好(状态200)
什么可以导致问题(状态= 0)与在线请求?
PS:Live HTTP Headers显示在所有4种情况下一切正常:
HTTP/1.1 200 OK Content-Length: 4742
PS2:VMWare上的Apache本地Web服务器(主机OS Win7,Guest OS Ubuntu,网络适配器 - NAT).浏览器 - Firefox.
我正在开发一个iOS项目.
在此应用程序中,我正在从服务器下载图像.
问题:
在下载图像时,我收到请求超时.根据文档HTTP请求超时的状态代码是408.
但在我的应用程序中,我收到HTTP状态代码0,出现以下错误
错误域= NSURLErrorDomain代码= -1001"请求超时." UserInfo = 0xb9af710 {NSErrorFailingURLStringKey = http://xxxx.com/resources/p/PNG/1383906967_5621_63.jpg,NSErrorFailingURLKey = http://xxxx.com/resources/p/PNG/1383906967_5621_63.jpg,NSLocalizedDescription =请求超时.,NSUnderlyingError = 0x13846870"请求超时."}
在搜索期间,通过互联网,我找不到有关HTTP状态代码0的信息.
任何人都可以向我解释这个吗?
我有一个长期运行的服务调用,我使用jQuery.ajax调用.该服务可能需要2分钟才能完成.
提交了AJAX请求,预计不会响应.一个单独的AJAX请求报告操作的进度.
在某些网站上,我们发现代理在2分钟后重新提交Ajax请求本身.浏览器是Chrome浏览器,但我怀疑它与Chrome有关.
这肯定不是我们重新提交ajax请求的情况.为了确保我们设置bool以防止在beforeSend事件中重新提交任何内容.
我正在处理这种重新提交的方式是在数据请求和服务测试中添加一个nonce,如果在执行操作之前已经提交了nonce.对此服务的任何第二次调用都会无害地返回,并且原始请求将继续进行.
请注意,我添加了一个无意义的服务,除了等待5分钟之外什么也没做,而且我没有经历过测试服务的问题(在生产站点上).
任何人都可以给我任何线索,导致这个ajax重新提交的原因,以及如何在本地复制它?
这是用于发送请求的js:
var sent = false;
var data = { ... }; // data is a very large object;
$.ajax("service.ashx?loc=area/subarea/", {
type: "POST",
data: data,
traditional: true,
error: function (jqXHR, textStatus, errorThrown) {
if (jqXHR.status === 0) {
// see http://stackoverflow.com/questions/3825581/does-an-http-status-code-of-0-have-any-meaning
} else {
ReportFailure(textStatus,errorThrown);
}
},
beforeSend: function () {
if (sent === true) {
return false;
}
sent = true;
return true;
}
});
Run Code Online (Sandbox Code Playgroud)
这是从HTTP存档(HAR)请求的ajax,其中请求被重新提交并且它立即失败.注意2分钟的时间.
{
"startedDateTime": "2015-12-11T12:26:58.018Z",
"time": 120066.61499999973,
"request": { …Run Code Online (Sandbox Code Playgroud) ajax ×4
javascript ×3
http ×2
jquery ×2
cors ×1
download ×1
fetch-api ×1
httpresponse ×1
https ×1
nserror ×1