【问题标题】:HTTP status code 0 - Error Domain=NSURLErrorDomain?HTTP 状态代码 0 - 错误域 = NSURLErrorDomain?
【发布时间】:2013-11-20 09:58:08
【问题描述】:

我正在开发一个 iOS 项目。

在这个应用程序中,我正在从服务器下载图像。

问题:

下载图片时,我收到了Request Timeout。根据文档,请求超时的HTTP状态代码是408

但在我的应用程序中,我收到 HTTP 状态代码 0 并出现以下错误

Error Domain=NSURLErrorDomain Code=-1001 "请求超时。" 用户信息=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 "请求超时。"}

在通过 Internet 进行搜索时,我没有找到有关 HTTP 状态代码 0 的信息。

谁能给我解释一下?

【问题讨论】:

标签: http download http-status-codes nserror


【解决方案1】:

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

【讨论】:

  • IE10 有一个奇怪的错误,当接收到状态码 401 或 403 时,它会将其解释为状态码 0。在我的脑海中,状态码 0 是一个错误,因为显然有问题。
  • 答案是错误的。当浏览器无法连接到服务器时,状态码 0 存在。当您遇到不同的错误时,例如504 那么这是由反向代理设置引起的。
  • 答案是正确的。没有 HTTP 状态代码 0。您可能会将其视为 API 的返回值,但它不会出现在 HTTP 响应消息中。
【解决方案2】:

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

在您的情况下,您出现状态码为 0,因为请求超时,而 0 只是该属性的默认值。超时本身可能有多种原因,例如服务器没有及时响应、被防火墙阻止或整个网络连接中断。通常在后者的情况下,虽然手机足够聪明,知道它没有网络连接并且会立即失败。但是,它仍然会失败并显示明显的状态代码 0。

请注意,如果状态码为 0,则在返回的 NSError 对象中捕获真正的错误,而不是在 NSHTTPURLResponse 中。

HTTP 状态 408 在我的经验中非常罕见。我自己从来没有遇到过。但它显然用于客户端需要保持与服务器的活动套接字连接的情况,并且服务器正在等待客户端通过打开的套接字发送更多数据,但它不会在给定的时间内完成并且服务器以408 状态码结束连接,本质上是告诉客户端“你花了太长时间”。

【讨论】:

  • 完美的解释。
【解决方案3】:

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

List of HTTP status codes

【讨论】:

  • 在您提供的链接中没有关于 HTTP 状态代码 0 的信息。
【解决方案4】:

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

【讨论】:

    【解决方案5】:

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

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

    问题是,status: 0 有点通用,它们可能是更多触发空响应正文的用例。

    【讨论】:

    • 这是一个 API 状态,而不是 HTTP 状态。如果没有 HTTP 响应,则其中没有 HTTP 状态代码。
    • 状态码 0 不代表有 HTTP 响应码,但如果您的服务器不可用,则可能是问题。
    【解决方案6】:

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

    但这三个原因不规范

    【讨论】:

    • 你有这方面的资料吗?
    • 任何源代码都适用于测试前两点,你只需要一个基于ajax的请求。但是第三个是在取消用户请求时发生的,这可以通过 jquery 中的 abort 函数来完成。
    【解决方案7】:

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

    【讨论】:

      【解决方案8】:

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

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

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

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

      【讨论】:

        【解决方案9】:

        我们得到了错误:

        GET http://localhost/pathToWebSite/somePage.aspx 引发 http.status: 0 错误

        该调用是从调用 VBS 文件的 Windows 任务发出的,因此为了解决问题,将浏览器指向该 url,我们得到一个隐私错误:

        您的连接不是私密的

        攻击者可能试图从本地主机窃取您的信息 (例如,密码、消息或信用卡)。 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。晦涩难懂,是的,但我会在明年遇到这个问题,现在我会在谷歌搜索中找到我的答案。

        【讨论】:

          【解决方案10】:

          就我而言,CORS。

          我曾经在一个 iOS 应用中遇到过这样的反应。解决方案是标题中缺少Access-Control-Allow-Origin: *

          更多:https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin

          【讨论】:

            【解决方案11】:

            如果使用 NSURLConnection,401 http 响应可能会发生这种情况。

            NSURLConnection returning error instead of response for 401

            【讨论】:

              【解决方案12】:

              当我的 URL 以 file:// 开头时,即没有服务器但请求从本地文件系统获取文件时,我得到了状态代码 0。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2017-11-30
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2016-03-10
                • 1970-01-01
                相关资源
                最近更新 更多