我正在开发一个iOS项目。
在此应用程序中,我正在从服务器下载图像。
问题:
下载图片时,我收到了Request Timeout。根据文档,请求超时的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的信息。
任何人都可以向我解释这个吗?
答案 0 :(得分:79)
没有HTTP状态代码0.您看到的是您正在使用的API /库返回的0。您必须检查文档。
答案 1 :(得分:61)
NSHTTPURLResponse
对象中的状态代码0通常表示没有响应,并且可能由于各种原因而发生。服务器永远不会返回0状态,因为这不是有效的HTTP状态代码。
在您的情况下,您出现以获取状态代码0,因为请求超时,0只是属性的默认值。超时本身可能由于各种原因,例如服务器没有及时响应,被防火墙阻止,或者整个网络连接断开。通常在后者的情况下,尽管手机足够聪明,知道它没有网络连接并且会立即失败。但是,它仍然会以明显的状态代码0失败。
请注意,如果状态代码为0,则会在返回的NSError
对象中捕获实际错误,而不是NSHTTPURLResponse
。
根据我的经验,HTTP状态408
非常罕见。我自己从未遇到过。但它显然用于客户端需要维护与服务器的活动套接字连接,并且服务器正在等待客户端通过打开的套接字发送更多数据的情况,但它不会在给定的时间内和服务器以408
状态代码结束连接,基本上告诉客户“你花了太长时间”。
答案 2 :(得分:10)
在iOS SDK中当您的API调用超时时,您将获得状态0。
答案 3 :(得分:8)
响应为空。 大多数情况下,代码将统计为1xx,2xx,3xx,4xx,5xx。
答案 4 :(得分:5)
根据我有限的经验,我会说以下两种情况可能会引起回应status code: 0
,请记住;他们可能会更多,但我知道这两个:
status: 0
略显通用,它们可能是触发空响应体的更多用例。
答案 5 :(得分:3)
HTTP响应0不是标准的HTTP响应。但是它表明客户端无法与服务器连接,因此发生超时。
答案 6 :(得分:2)
我们收到了错误:
GET http://localhost/pathToWebSite/somePage.aspx引发了一个http.status:0错误
该调用来自调用VBS文件的Windows任务,因此要解决问题,将浏览器指向该URL,我们收到隐私错误:
您的连接不是私密的
攻击者可能试图从localhost窃取您的信息 (例如,密码,消息或信用卡)。 NET :: ERR_CERT_COMMON_NAME_INVALID
自动向Google报告可能发生的安全事件的详细信息。 隐私政策返回安全此服务器无法证明它是 本地主机;其安全证书来自* .ourdomain.com。这可能 是由于配置错误或攻击者拦截你的 连接。了解更多。
这是因为我们有一个IIS URL重写规则集以强制连接使用https。该规则将http://localhost转移到https://localhost,但我们的SSL证书基于面向外部的域名而不是localhost,因此错误报告为状态码0.因此隐私错误可能是一个非常模糊的原因对于此状态代码0。
在我们的例子中,解决方案是为localhost的规则添加一个例外,并允许http://localhost/pathToWebSite/somePage.aspx使用http。晦涩难懂,是的,但我明年会遇到这个问题,现在我会在谷歌搜索中找到答案。
答案 7 :(得分:1)
我的情况是CORS。
我曾经在iOS应用中收到过这样的回复。解决的方法是在标头中缺少Access-Control-Allow-Origin: *
。
更多:https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin
答案 8 :(得分:0)
我有一个java脚本ajax客户端& nodejs表达应用服务器
客户端代码如下:
...
var status1 = xmlHttpRequest.status;
...
服务器代码如下:
...
// An exception here results HTTP status codes in status1 (at client side above)
...
...
var reqDb = http.request(options, requestCompleteCallback);
...
...
function requestCompleteCallback(response) {
...
// An exception here results in 0 in status1 (at client side above)
...
}
30分钟的努力来解决这个问题 希望这篇文章可以帮助别人。
祝你好运。
答案 9 :(得分:0)
在登机口超时时,错误回叫状态将为零。
var legend = svg.selectAll("g.legend")
.data(extent_color_domain)
.enter().append("g")
.attr("class", "legend");
var ls_w = 20, ls_h = 20;
legend.append("rect")
.attr("x", 20)
.attr("y", function(d, i){ return h - (i*ls_h) - 2*ls_h;})
.attr("width", ls_w)
.attr("height", ls_h)
.style("fill", function(d, i) { return color(d); })
.style("opacity", 0.8);
legend.append("text")
.attr("x", 50)
.attr("y", function(d, i){ return h - (i*ls_h) - ls_h - 4;})
.text(function(d, i){ return legend_labels[i]; });
答案 10 :(得分:0)
有时,浏览器会使用错误对象响应http错误处理程序,该错误处理程序的状态设置为0,即使您在网络中看到404、401、500等错误状态也是如此。
如果您的应用程序和API在不同的域上,则可能会发生这种情况-应用了CORS机制。 根据CORS,每个API请求浏览器都会发送两个请求:
在应用程序中,我们正在处理“实际/原始请求”的错误响应,如果“预检选项请求”失败,则浏览器不会为http错误处理程序提供正确的HttpError对象。 因此,要获得http响应的正确状态-确保获得成功的预检OPTIONS请求响应。
答案 11 :(得分:0)
如果使用NSURLConnection,可能会出现401 http响应。
请参见NSURLConnection returning error instead of response for 401