HTTP状态代码0-错误域=nsurErrorDomain?

HTTP状态代码0-错误域=nsurErrorDomain?,http,download,http-status-codes,nserror,Http,Download,Http Status Codes,Nserror,我正在做一个iOS项目 在这个应用程序中,我从服务器下载图像 问题: 当我下载图片时,我得到了。根据文档,请求超时的HTTP状态代码为408 但是在我的应用程序中,我得到了HTTP状态代码0,并出现以下错误 Error Domain=NSURLErrorDomain Code=-1001“请求超时。” UserInfo=0xb9af710 {NSErrorFailingURLStringKey=, NSErrorFailingURLKey=, NSLocalizedDescription=请求超

我正在做一个iOS项目

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

问题:

当我下载图片时,我得到了。根据文档,请求超时的HTTP状态代码为
408

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

Error Domain=NSURLErrorDomain Code=-1001“请求超时。” UserInfo=0xb9af710 {NSErrorFailingURLStringKey=, NSErrorFailingURLKey=, NSLocalizedDescription=请求超时。, NSUnderlyingError=0x13846870“请求超时。”}

在通过internet进行搜索期间,我没有找到有关HTTP状态代码0的信息

有人能给我解释一下吗?

回答是空的。 大多数情况下,代码将统计为1x、2xx、3xx、4xx、5xx


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

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

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

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

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


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

根据我有限的经验,我想说以下两种情况可能会导致响应
状态代码:0
,请记住;它们可能会更多,但我知道这两种情况:

  • 你的连接可能反应缓慢
  • 或者后端服务器不可用
问题是,
status:0
有点通用,它们可能是触发空响应正文的更多用例。

我们得到了错误:

获取引发的http.status:0错误

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

你的连接不是私人的

攻击者可能试图从localhost窃取您的信息 (例如,密码、消息或信用卡)。 NET::ERR\u CERT\u COMMON\u NAME\u无效

自动向谷歌报告可能发生的安全事件的详细信息。 隐私策略返回安全此服务器无法证明它是安全的 localhost;其安全证书来自*.ourdomain.com。这可能是 可能是由于配置错误或攻击者拦截您的 连接。了解更多

这是因为我们设置了IIS URL重写规则以强制连接使用https。该规则转移到,但我们的SSL证书基于面向外部的域名而不是本地主机,因此该错误报告为状态代码0。因此,隐私错误可能是此状态代码0的一个非常模糊的原因


在我们的案例中,解决方案是为localhost规则添加一个例外,并允许使用http。是的,不清楚,但我明年会遇到这个问题,现在我会在谷歌搜索中找到答案。

http响应0不是标准的http响应。但它表明客户端无法连接到服务器,因此发生了第四次超时

我的情况就是这样

我曾经在一个iOS应用程序中得到过这样的响应。解决方案是标题中缺少
访问控制允许源代码:


更多信息:

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


但这三个原因并不是标准化的

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

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

  • 飞行前选项请求了解API是否允许实际/原始请求
  • 当API允许时(OPTIOS请求以状态204响应,并且正确的访问控制允许原点标头)-浏览器发送下一个“实际/原点请求”
  • 在应用程序中,我们正在处理“实际/原始请求”的错误响应,若“飞行前选项请求”失败,则浏览器不会为http错误处理程序提供正确的HttpError对象。
    因此,要获得http响应的正确状态,请确保获得成功的飞行前选项请求响应。

    如果使用NSURLConnection,401 http响应可能会出现这种情况


    请参阅您提供的链接中没有关于HTTP状态代码0的信息。IE10在接收时有一个奇怪的错误