iOS 网络请求错误,URL错误码

2,258 阅读12分钟

操作系统错误

操作系统错误是因为数据包没有到达预定目标导致的,造成原因可能有:

没有网络——没有连接网络

无法路由到目标主机——主要是因为目标主机可能位于隔离网络或者处于离线状态。导致的。

没有应用监听目标port——请求到达目标主机后数据包会发送到指定的port号。假设server没有监听这个port号或者是有太多的请求在排队那么连接请求就会被拒绝。

无法解析目标主机名——URL载入系统会返回错误。

 通常这些错误由配置错误或是尝试訪问没有外部名字解析且处于隔离网络中的主机造成的。

在iOS的URL载入系统中,操作系统错误会以NSError对象的形式发送给应用。ios通过NSError在软件中传递错误信息。使用NSError的主要优势在于NSError对象包括了错误域属性;

有非常多网络请求问题是由于网络没有连接造成的,所以我们每次进行网络请求的时候都须要进行检查。由于移动设备会移动出网络。这里我们通常採用Reachability。

http错误

http错误是因为http请求。httpServer或应用server的问题造成的。http错误通过http响应的状态码发送给请求client。

5类http错误

  • 信息性质的100级别——来自httpserver的信息,请求的处理将会继续,只是带有警告。
  • 成功的200级别——服务请接受了请求。
  • 重定向须要的300级别——资源已经移动了须要重定向。
  • client错误400级别——表示client发出了server无法正确处理错误的数据,比如不对的http头导致这个范围错误。
  • 下游错误500级别——表示httpserver与下游应用server之间出现了错误。

应用错误

这些错误是是由执行在服务层之上的业务逻辑和应用造成的。

错误可能是代码问题,比如异常,也可能是语义问题。比方向服务提供了无效账号等。

又比如银行卡中有500元钱而你要提1000元现金,这就会错误发生。

常见网络请求错误码

  • (NSString *)networkErrorInfo

{

    NSError * err;

    NSString *errorMsg;

    switch (err.code) {

        case -1://NSURLErrorUnknown

        errorMsg = @"无效的URL地址";

        break;

\

        case -999://NSURLErrorCancelled

        errorMsg = @"无效的URL地址";

        break;

\

        case -1000://NSURLErrorBadURL

        errorMsg = @"无效的URL地址";

        break;

\

        case -1001://NSURLErrorTimedOut

        errorMsg = @"网络不给力,请稍后再试";

        break;

\

        case -1002://NSURLErrorUnsupportedURL

        errorMsg = @"不支持的URL地址";

        break;

\

        case -1003://NSURLErrorCannotFindHost

        errorMsg = @"找不到服务器";

        break;

\

        case -1004://NSURLErrorCannotConnectToHost

        errorMsg = @"连接不上服务器";

        break;

\

        case -1103://NSURLErrorDataLengthExceedsMaximum

        errorMsg = @"请求数据长度超出最大限度";

        break;

\

        case -1005://NSURLErrorNetworkConnectionLost

        errorMsg = @"网络连接异常";

        break;

\

        case -1006://NSURLErrorDNSLookupFailed

        errorMsg = @"DNS查询失败";

        break;

\

        case -1007://NSURLErrorHTTPTooManyRedirects

        errorMsg = @"HTTP请求重定向";

        break;

\

        case -1008://NSURLErrorResourceUnavailable

        errorMsg = @"资源不可用";

        break;

\

        case -1009://NSURLErrorNotConnectedToInternet

        errorMsg = @"无网络连接";

        break;

\

        case -1010://NSURLErrorRedirectToNonExistentLocation

        errorMsg = @"重定向到不存在的位置";

        break;

\

        case -1011://NSURLErrorBadServerResponse

        errorMsg = @"服务器响应异常";

        break;

\

        case -1012://NSURLErrorUserCancelledAuthentication

        errorMsg = @"用户取消授权";

        break;

\

        case -1013://NSURLErrorUserAuthenticationRequired

        errorMsg = @"需要用户授权";

        break;

\

        case -1014://NSURLErrorZeroByteResource

        errorMsg = @"零字节资源";

        break;

\

        case -1015://NSURLErrorCannotDecodeRawData

        errorMsg = @"无法解码原始数据";

        break;

\

        case -1016://NSURLErrorCannotDecodeContentData

        errorMsg = @"无法解码内容数据";

        break;

\

        case -1017://NSURLErrorCannotParseResponse

        errorMsg = @"无法解析响应";

        break;

\

        case -1018://NSURLErrorInternationalRoamingOff

        errorMsg = @"国际漫游关闭";

        break;

\

        case -1019://NSURLErrorCallIsActive

        errorMsg = @"被叫激活";

        break;

\

        case -1020://NSURLErrorDataNotAllowed

        errorMsg = @"数据不被允许";

        break;

\

        case -1021://NSURLErrorRequestBodyStreamExhausted

        errorMsg = @"请求体";

        break;

\

        case -1100://NSURLErrorFileDoesNotExist

        errorMsg = @"文件不存在";

        break;

\

        case -1101://NSURLErrorFileIsDirectory

        errorMsg = @"文件是个目录";

        break;

\

        case -1102://NSURLErrorNoPermissionsToReadFile

        errorMsg = @"无读取文件权限";

        break;

\

        case -1200://NSURLErrorSecureConnectionFailed

        errorMsg = @"安全连接失败";

        break;

\

        case -1201://NSURLErrorServerCertificateHasBadDate

        errorMsg = @"服务器证书失效";

        break;

\

        case -1202://NSURLErrorServerCertificateUntrusted

        errorMsg = @"不被信任的服务器证书";

        break;

\

        case -1203://NSURLErrorServerCertificateHasUnknownRoot

        errorMsg = @"未知Root的服务器证书";

        break;

\

        case -1204://NSURLErrorServerCertificateNotYetValid

        errorMsg = @"服务器证书未生效";

        break;

\

        case -1205://NSURLErrorClientCertificateRejected

        errorMsg = @"客户端证书被拒";

        break;

\

        case -1206://NSURLErrorClientCertificateRequired

        errorMsg = @"需要客户端证书";

        break;

\

        case -2000://NSURLErrorCannotLoadFromNetwork

        errorMsg = @"无法从网络获取";

        break;

\

        case -3000://NSURLErrorCannotCreateFile

        errorMsg = @"无法创建文件";

        break;

\

        case -3001://  NSURLErrorCannotOpenFile

        errorMsg = @"无法打开文件";

        break;

\

        case -3002://NSURLErrorCannotCloseFile

        errorMsg = @"无法关闭文件";

        break;

\

        case -3003://NSURLErrorCannotWriteToFile

        errorMsg = @"无法写入文件";

        break;

\

        case -3004://NSURLErrorCannotRemoveFile

        errorMsg = @"无法删除文件";

        break;

\

        case -3005://NSURLErrorCannotMoveFile

        errorMsg = @"无法移动文件";

        break;

\

        case -3006://NSURLErrorDownloadDecodingFailedMidStream

        errorMsg = @"下载解码数据失败";

        break;

\

        case -3007://NSURLErrorDownloadDecodingFailedToComplete

        errorMsg = @"下载解码数据失败";

        break;

    }

    return errorMsg;

}

HTTP 错误 400

400 请求出错
由于语法格式有误,服务器无法理解此请求。不作修改,客户程序就无法重复此请求。

HTTP 错误 401

401.1 未授权:登录失败
此错误表明传输给服务器的证书与登录服务器所需的证书不匹配。
请与 Web 服务器的管理员联系,以确认您是否具有访问所请求资源的权限。
401.2 未授权:服务器的配置导致登录失败
此错误表明传输给服务器的证书与登录服务器所需的证书不匹配。此错误通常由未发送正确的 WWW 验证表头字段所致。
请与 Web 服务器的管理员联系,以确认您是否具有访问所请求资源的权限。
401.3 未授权:由于资源中的 ACL 而未授权
此错误表明客户所传输的证书没有对服务器中特定资源的访问权限。此资源可能是客户机中的地址行所列出的网页或文件,也可能是处理客户机中的地址行所列出的文件所需服务器上的其他文件。
请记录试图访问的完整地址,并与 Web 服务器的管理员联系以确认您是否具有访问所请求资源的权限。
401.4 未授权:授权服务被筛选程序拒绝
此错误表明 Web 服务器已经安装了筛选程序,用以验证连接到服务器的用户。此筛选程序拒绝连接到此服务器的真品证书的访问。
请记录试图访问的完整地址,并与 Web 服务器的管理员联系以确认您是否具有访问所请求资源的权限。
401.5 未授权:ISAPI/CGI 应用程序的授权失败
此错误表明试图使用的 Web服务器中的地址已经安装了 ISAPI 或 CGI程序,在继续之前用以验证用户的证书。此程序拒绝用来连接到服务器的真品证书的访问。
请记录试图访问的完整地址,并与 Web服务器的管理员联系以确认您是否具有访问所请求资源的权限

HTTP 错误 403

403.1 禁止:禁止执行访问
如果从并不允许执行程序的目录中执行 CGI、ISAPI或其他执行程序就可能引起此错误。
如果问题依然存在,请与 Web 服务器的管理员联系。
403.2 禁止:禁止读取访问
如果没有可用的默认网页或未启用此目录的目录浏览,或者试图显示驻留在只标记为执行或脚本权限的目录中的HTML 页时就会导致此错误。
如果问题依然存在,请与 Web 服务器的管理员联系。
403.3 禁止:禁止写访问
如果试图上载或修改不允许写访问的目录中的文件,就会导致此问题。
如果问题依然存在,请与 Web服务器的管理员联系。
403.4 禁止:需要 SSL
此错误表明试图访问的网页受安全套接字层(SSL)的保护。要查看,必须在试图访问的地址前输入https:// 以启用 SSL。
如果问题依然存在,请与 Web服务器的管理员联系。
403.5 禁止:需要 SSL 128
此错误消息表明您试图访问的资源受 128位的安全套接字层(SSL)保护。要查看此资源,需要有支持此SSL 层的浏览器。
请确认浏览器是否支持 128 位 SSL安全性。如果支持,就与 Web服务器的管理员联系,并报告问题。
403.6 禁止:拒绝 IP 地址
如果服务器含有不允许访问此站点的 IP地址列表,并且您正使用的 IP地址在此列表中,就会导致此问题。
如果问题依然存在,请与 Web服务器的管理员联系。
403.7 禁止:需要用户证书
当试图访问的资源要求浏览器具有服务器可识别的用户安全套接字层(SSL)证书时就会导致此问题。可用来验证您是否为此资源的合法用户。
请与 Web服务器的管理员联系以获取有效的用户证书。
403.8 禁止:禁止站点访问
如果 Web服务器不为请求提供服务,或您没有连接到此站点的权限时,就会导致此问题。
请与 Web 服务器的管理员联系。
403.9 禁止访问:所连接的用户太多
如果 Web太忙并且由于流量过大而无法处理您的请求时就会导致此问题。请稍后再次连接。
如果问题依然存在,请与 Web 服务器的管理员联系。
403.10 禁止访问:配置无效
此时 Web 服务器的配置存在问题。
如果问题依然存在,请与 Web服务器的管理员联系。
403.11 禁止访问:密码已更改
在身份验证的过程中如果用户输入错误的密码,就会导致此错误。请刷新网页并重试。
如果问题依然存在,请与 Web服务器的管理员联系。
403.12 禁止访问:映射程序拒绝访问
拒绝用户证书试图访问此 Web 站点。
请与站点管理员联系以建立用户证书权限。如果必要,也可以更改用户证书并重试。

HTTP 错误 404

404 找不到
Web 服务器找不到您所请求的文件或脚本。请检查URL 以确保路径正确。
如果问题依然存在,请与服务器的管理员联系。

HTTP 错误 405

405 不允许此方法
对于请求所标识的资源,不允许使用请求行中所指定的方法。请确保为所请求的资源设置了正确的 MIME 类型。
如果问题依然存在,请与服务器的管理员联系。

HTTP 错误 406

406 不可接受
根据此请求中所发送的“接受”标题,此请求所标识的资源只能生成内容特征为“不可接受”的响应实体。
如果问题依然存在,请与服务器的管理员联系。

HTTP 错误 407

**407 需要代理身份验证 **
在可为此请求提供服务之前,您必须验证此代理服务器。请登录到代理服务器,然后重试。
如果问题依然存在,请与 Web 服务器的管理员联系。

HTTP 错误 412

412 前提条件失败
在服务器上测试前提条件时,部分请求标题字段中所给定的前提条件估计为FALSE。客户机将前提条件放置在当前资源 metainformation(标题字段数据)中,以防止所请求的方法被误用到其他资源。
如果问题依然存在,请与 Web 服务器的管理员联系。

HTTP 错误 414

**414 Request-URI 太长 **
Request-URL太长,服务器拒绝服务此请求。仅在下列条件下才有可能发生此条件:
客户机错误地将 POST 请求转换为具有较长的查询信息的 GET 请求。
客户机遇到了重定向问题(例如,指向自身的后缀的重定向前缀)。
服务器正遭受试图利用某些服务器(将固定长度的缓冲区用于读取或执行 Request-URI)中的安全性漏洞的客户干扰。
如果问题依然存在,请与 Web 服务器的管理员联系。

HTTP 错误 500

500 服务器的内部错误
Web 服务器不能执行此请求。请稍后重试此请求。
如果问题依然存在,请与 Web服务器的管理员联系。

HTTP 错误 501

501 未实现
Web 服务器不支持实现此请求所需的功能。请检查URL 中的错误,如果问题依然存在,请与 Web服务器的管理员联系。

HTTP 错误 502

502 网关出错
当用作网关或代理时,服务器将从试图实现此请求时所访问的upstream 服务器中接收无效的响应。
如果问题依然存在,请与 Web服务器的管理员联系

附录常见URL报错


typedef enum NSURLError{

    NSURLErrorUnknown = -1,

    NSURLErrorCancelled = -999,

    NSURLErrorBadURL = -1000,

    NSURLErrorTimedOut = -1001,

    NSURLErrorUnsupportedURL = -1002,

    NSURLErrorCannotFindHost = -1003,

    NSURLErrorCannotConnectToHost = -1004,

    NSURLErrorDataLengthExceedsMaximum = -1103,

    NSURLErrorNetworkConnectionLost = -1005,

    NSURLErrorDNSLookupFailed = -1006,

    NSURLErrorHTTPTooManyRedirects = -1007,

    NSURLErrorResourceUnavailable = -1008,

    NSURLErrorNotConnectedToInternet = -1009,

    NSURLErrorRedirectToNonExistentLocation = -1010,

    NSURLErrorBadServerResponse = -1011,

    NSURLErrorUserCancelledAuthentication = -1012,

    NSURLErrorUserAuthenticationRequired = -1013,

    NSURLErrorZeroByteResource = -1014,

    NSURLErrorCannotDecodeRawData = -1015,

    NSURLErrorCannotDecodeContentData = -1016,

    NSURLErrorCannotParseResponse = -1017,

    NSURLErrorFileDoesNotExist = -1100,

    NSURLErrorFileIsDirectory = -1101,

    NSURLErrorNoPermissionsToReadFile = -1102,

    NSURLErrorSecureConnectionFailed = -1200,

    NSURLErrorServerCertificateHasBadDate = -1201,

    NSURLErrorServerCertificateUntrusted = -1202,

    NSURLErrorServerCertificateHasUnknownRoot = -1203,

    NSURLErrorServerCertificateNotYetValid = -1204,

    NSURLErrorClientCertificateRejected = -1205,

    NSURLErrorClientCertificateRequired = -1206,

    NSURLErrorCannotLoadFromNetwork = -2000,

    NSURLErrorCannotCreateFile = -3000,

    NSURLErrorCannotOpenFile = -3001,

    NSURLErrorCannotCloseFile = -3002,

    NSURLErrorCannotWriteToFile = -3003,

    NSURLErrorCannotRemoveFile = -3004,

    NSURLErrorCannotMoveFile = -3005,

    NSURLErrorDownloadDecodingFailedMidStream = -3006,

    NSURLErrorDownloadDecodingFailedToComplete = -3007

};