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

Irf*_*ISH 84 http download http-status-codes nserror

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

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

Jul*_*hke 85

没有HTTP状态代码0.您看到的是您正在使用的API /库返回的0.您必须检查文档.

  • IE10有一个奇怪的错误,当接收状态代码401或403时,它将其解释为状态代码0.在我的脑海中,状态代码0是一个错误,因为显然有些错误. (6认同)
  • 门路超时将在您的http错误后面收到0状态,http://www.angulartutorial.net/2017/03/http-status-codes-and-meanings.html (4认同)
  • 答案是错误的。当浏览器无法连接到服务器时,存在状态代码 0。当您收到不同的错误(例如 504)时,这是由反向代理设置引起的。 (2认同)

dev*_*os1 64

对象中的状态代码0 NSHTTPURLResponse通常意味着没有响应,并且可能由于各种原因而发生.服务器永远不会返回0状态,因为这不是有效的HTTP状态代码.

在您的情况下,您似乎获得状态代码0,因为请求超时,0只是属性的默认值.超时本身可能由于各种原因,例如服务器没有及时响应,被防火墙阻止,或者整个网络连接断开.通常在后者的情况下,尽管手机足够聪明,知道它没有网络连接并且会立即失败.但是,它仍然会失败,显而易见的状态代码为0.

请注意,在状态代码为0的情况下,将在返回的NSError对象中捕获实际错误,而不是NSHTTPURLResponse.

408根据我的经验,HTTP状态非常罕见.我自己从未遇到过.但它显然用于客户端需要维护与服务器的活动套接字连接,并且服务器正在等待客户端通过打开的套接字发送更多数据的情况,但它不会在给定的时间内和服务器以408状态代码结束连接,基本上告诉客户"你花了太长时间".

  • 完美的解释。 (3认同)

小智 10

在iOS SDK中当您的API调用超时时,您将获得状态0.


小智 9

响应是空的.大多数情况下,代码将统计为1xx,2xx,3xx,4xx,5xx.

HTTP状态代码列表


小智 7

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

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

  1. 预检选项请求了解 API 是否允许实际/起源请求。
  2. 当 API 允许时(OPTIOS 请求响应状态 204 和正确的 Access-Control-Allow-Origin 标头) - 浏览器发送下一个“实际/起源请求”。

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


Har*_*dav 6

由于三个原因, 可能会出现状态代码“0”:
1) 客户端无法连接到服务器
2) 客户端无法在超时期限内 收到响应
3) 请求已被客户端“停止(中止)”

但这三个原因不规范


Sim*_*ion 5

根据我有限的经验,我会说以下两种情况可能会引起反应status code: 0,请记住; 他们可能会更多,但我知道这两个:

  • 您的连接可能响应缓慢.
  • 或者后端服务器可能不可用.

事情是,status: 0略微通用,它们可能是触发空响应体的更多用例.


小智 5

HTTP 响应 0 不是标准 HTTP 响应。但它表明客户端无法与服务器连接,因此发生超时。