在进行网络数据交换的时候总是遇到各种各样的错误。
这些网络错误是来自client还是server。
我们来梳理一下:
我们将错误分为三个大类
- 操作系统错误
- http请求错误
- 应用错误
1.操作系统错误是因为数据包没有到达预定目标导致的,造成原因可能有:
- 没有网络——没有连接网络
- 无法路由到目标主机——主要是因为目标主机可能位于隔离网络或者处于离线状态。导致的。
- 没有应用监听目标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元现金,这就会错误发生。
来自ios网络高级编程。