我正在做一个iOS项目。
在这个应用程序中,我从服务器下载图像。
问题:
当我下载图片时,我得到了
Request Timeout
。根据文档,请求超时的HTTP状态码为
408
。
但是在我的应用程序中,我得到了HTTP状态码
0
,错误如下
错误Domain=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=The请求超时。,NSUnderlyingError=0x13846870“请求超时。”}
在互联网上进行搜索时,我没有找到有关HTTP状态代码0的信息。
有人能给我解释一下吗?
响应为空。大多数情况下,代码将使用1xx、2xx、3xx、4xx、5xx进行统计。
没有HTTP状态代码0。您看到的是您正在使用的API/库返回的0。您必须查看文档以了解这一点。
在API SDK中,当你的iOS调用超时时,你会得到0状态。
NSHTTPURLResponse
对象中的状态代码为0通常表示没有响应,这可能是由于各种原因造成的。服务器永远不会返回状态0,因为这不是有效的HTTP状态代码。
在您的示例中,您似乎得到的状态代码为0,因为请求超时,而0只是该属性的默认值。超时本身可能是由于各种原因,例如服务器没有及时响应、被防火墙阻止或整个网络连接断开。通常在后者的情况下,尽管手机足够智能,可以知道它没有网络连接,而且会立即失败。但是,它仍然会失败,并显示一个明显的状态代码0。
请注意,在状态代码为0的情况下,将在返回的
NSError
对象中捕获真正的错误,而不是在
NSHTTPURLResponse
中捕获。
在我的经验中,HTTP status
408
是相当不常见的。我自己从来没有遇到过这样的情况。但它显然是在以下情况下使用的:客户端需要维护到服务器的活动套接字连接,服务器正在等待客户端通过打开的套接字发送更多数据,但在给定的时间内没有发送更多数据,服务器以
408
状态代码结束连接,本质上是告诉客户端“您花费了太长时间”。
根据我有限的经验,我会说以下两种情况可能会导致响应
status code: 0
,请记住;他们可能会更多,但我知道这两种:
问题是,
status: 0
是稍微通用的,它们可能是更多触发空响应体的用例。
我们得到了错误:
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证书基于面向外部的域名,而不是本地主机,因此报告的错误为状态代码0。因此,隐私错误可能是此状态代码0的一个非常模糊的原因。
在我们的例子中,解决方案是在本地主机的规则中添加一个例外,并允许 http://localhost/pathToWebSite/somePage.aspx 使用http。是的,有点晦涩难懂,但我明年会遇到这个问题,现在我会在谷歌搜索中找到答案。
HTTP响应0不是标准HTTP响应。但这表明客户端无法与服务器连接,因此发生了第四次超时。
我的情况是CORS。
我曾经在一个iOS应用程序中得到过这样的回应。解决方案是头文件中缺少
Access-Control-Allow-Origin: *
。
更多信息: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin
由于三个原因,可能会出现状态代码'0‘
1)客户端 无法连接到服务器
2)客户端 在超时时间内无法接收到响应
3)请求被客户端 "stopped(aborted)" 。
但是这三个原因并没有标准化。
有时浏览器使用错误对象响应http错误处理程序,错误对象的状态设置为0,即使您可以在网络中看到404、401、500等错误状态。
如果您的应用程序和API位于不同的域上,则可能会发生这种情况-应用CORS机制。根据每个API请求的CORS,浏览器发送两个请求:
在应用程序中,我们正在处理“实际/原始请求”的错误响应,如果“印前检查选项请求”失败-浏览器没有为http错误处理程序提供正确的HttpError对象。因此,要获得正确的http响应状态-请确保获得成功的印前检查选项请求响应。
如果使用NSURLConnection,则401Http响应可能会发生这种情况。
请参阅 NSURLConnection returning error instead of response for 401
当我的网址以file://,开头时,我得到了一个状态代码0,即,当没有服务器,但请求正在从本地文件系统获取文件时。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2023 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号: 粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
扫码关注腾讯云开发者
领取腾讯云代金券