HTTP状态码0 - 错误域= NSURLErrorDomain?

时间:2013-11-08 11:40:05

标签: http download http-status-codes nserror

我正在开发一个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的信息。

任何人都可以向我解释这个吗?

12 个答案:

答案 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。

List of HTTP status codes

答案 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]; });

HTTP status codes

答案 10 :(得分:0)

有时,浏览器会使用错误对象响应http错误处理程序,该错误处理程序的状态设置为0,即使您在网络中看到404、401、500等错误状态也是如此。

如果您的应用程序和API在不同的域上,则可能会发生这种情况-应用了CORS机制。 根据CORS,每个API请求浏览器都会发送两个请求:

  1. 飞行前选项请求以了解API是否允许实际/原始请求。
  2. 当API允许时(OPTIOS请求以状态204响应,并具有正确的Access-Control-Allow-Origin标头)-浏览器发送下一个“实际/原始请求”。

在应用程序中,我们正在处理“实际/原始请求”的错误响应,如果“预检选项请求”失败,则浏览器不会为http错误处理程序提供正确的HttpError对象。 因此,要获得http响应的正确状态-确保获得成功的预检OPTIONS请求响应。

答案 11 :(得分:0)

如果使用NSURLConnection,可能会出现401 http响应。

请参见NSURLConnection returning error instead of response for 401