一,在接口契约中处理错误. 二,错误状态可能不正确. 设备模糊地确认操作是崇拜失败的.比如,移动应用发出HTTP请求以在两个账户间转账.请求被银行系统接收并正确地处理:然而,由于网络失败应答却丢失了,NSURLConnection报告超时.超时发生了,但却是在转账请求成功之后发生的.如果重试该操作,就会导致重复转账,可能会造成用户透支. 三,验证负载. JSON和XML就具备了验证机制的负载格式,不过,以逗号分隔的值文件与HTML就没有这种机制. 四,分离错误与正常的业务状况. 五,总是检查HT…
No1: 客户端与服务器的交互流程: 1)客户端执行网络请求,从URL中解析出服务器的主机名 2)将服务器的主机名转换成服务器的IP地址 3)将端口号从URL中解析出来 4)建立一条从客户端与Web服务器的TCP连接 5)客户端通过输出流向服务器发送一条HTTP请求 6)服务器向客户端回送一条HTTP响应报文 7)客户端从输入流获取报文 8)客户端解析报文,关闭连接 9)客户端将结果显示在UI上 No2: HTTP请求方式: 1)GET 获取服务器中某个资源,www.devtf.cn/artic…
在进行网络数据交换的时候总是遇到各种各样的错误. 这些网络错误是来自client还是server. 我们来梳理一下: 我们将错误分为三个大类 操作系统错误 http请求错误 应用错误 1.操作系统错误是因为数据包没有到达预定目标导致的,造成原因可能有: 没有网络--没有连接网络 无法路由到目标主机--主要是因为目标主机可能位于隔离网络或者处于离线状态.导致的. 没有应用监听目标port--请求到达目标主机后数据包会发送到指定的port号.假设server没有监听这个port号或者是有太多的请求在…
5. 网络数据与网络错误 应该如何准备需要传输的数据? 应该如何对数据进行编码与格式化? Py程序需要提供哪些类型的错误? 5.1. 字节与字符串 PC与网卡都支持将字节作为通用传输单元.字节将8比特的信息封装起来,作为信息存储的通用单位. 但是,RAM芯片与网卡不同,程序运行中,Py能隐藏RAM中的int.str.list.dict的具体实现细节,除非使用特殊调试工具,否则无法查看存储的字节,只能看到外部表现. 5.1.0. 网络通信的不同在于,socket接口将字节暴露了出来,字节无论对程序…
6.TLS/SSL 6.0. 传输层安全协议(TLS, Transport Layer Security)是如今web上应用最广泛的加密方法了,1999年成为互联网标准.前身是安全套接层(SSL, Secure Sockets Layer),1995年发布.现代web的许多基础协议都使用TLS来验证Serv身份,并保证传输过程中的数据. 6.0.1. TLS的使用及部署方法一直都在变化.每年都会出现针对TLS加密算法的新型攻击,也就出现了新的加密技术来应对攻击. 6.1. TLS无法保护的信息…
3.TCP:传输控制协议 第一个版本在1974年定义,建立在网际层协议(IP)提供的数据包传输技术之上.TCP使程序可以使用连续的数据流进行相互通信. 除非网络原因导致连接中断/冻结,TCP都能保证将数据流完好无缺地传输至接收方,不会发生丢包.重包.乱序问题. 传输文档/文件的协议都使用TCP,包括浏览网页.文件传输.电子邮件的所有主要机制,也是人机间进行长对话的协议的基础之一,如SSH/聊天协议 经过30年的改进,现代TCP相当精良,除了协议设计专家,很少有人能再改进现代TCP栈的性能,就算是…
2.UDP 2.0.数据包表示较短的信息,大小通常不会超过几千字节,在浏览器与服务器进行会话/电子邮件客户端与ISP的邮件服务器进行会话时,这些独立而小型的数据包是如何组成会话的呢? 2.0.1.IP协议只负责尝试将每个数据包传输至正确的机器,如果两个独立的应用程序要维护一个会话的话,还需要两个额外的特性.这两个特性是由IP层以上的协议来提供的. 2.0.1.1. 多路复用(multiplexing):为两台主机之间传送的大量数据包打上标签,就可以将表示网页的数据包和用于电子邮件的数据包分开来,…
0.前言 代码目录: https://github.com/brandon-rhodes/fopnp/tree/m/py3 0.1.网络实验环境:理解客户端与服务器是如何通过网络进行通信的 每台机器通过一个Docker容器实现 0.1.1.调制解调器A和B下面的客户机(h1~h4)表示典型客户端场景,家庭或咖啡店(内部网络,不能访问互联网,如果要连互联网,都通过调制解调器IP进行连接) 0.1.2.调制解调器通过ISP网关连接广域网(主干路由器,负责将数据包发送至与之相连的网络) 0.1.3.e…
好久没写随笔了,最近在读<iOS 7 byTutorials>,很不错,推荐给大家. 每一个好的程序员也都是一个设计师,不懂设计的程序员不是好的CTO.哈哈,开个小玩笑. iOS 7设计的核心思想就是:-------->简洁.但在简洁的UI里面如何让用户发现当前界面的重点,对比度是我们最有力的工具. 对比度有下列四种用途 1.突出重点,淡化非重点 2.加强视觉效果 3.告诉用户哪里可以点击 4.增强文字可读性 举例说明,如图 这是一个简单的闹钟程序,先别着急往下看,先思考一下,这个界面在…
Outline 3.4 构建TCP服务器 3.5 构建HTTP服务器 3.6 构建TCP客户端 3.7 创建HTTP请求 3.8 使用UDP 3.9 用TLS/SSL保证服务器的安全性 3.10 用HTTPS保证HTTP服务器的安全性 3.4 构建TCP服务器 TCP服务器对象通过require("net").createServer()创建,它是一个事件发射器(event emitter),发射事件包括:listening, connection, close, error. TCP…
如果不使用+imageNamed:,那么把整张图片绘制到CGContext可能是最佳的方式了. 这里我们利用了CALayer的KVC来存储和检索任意的值,将图层和索引打标签. 使用KVC打标签…
Motivation 世俗一把,看看前端的JavaScript究竟能做什么. 顺便检验一下自己的学习能力. Audience 想看偏后台的Java程序员关于前端JavaScript的认识的职业前端工程师.全栈工程师. 本人技术积累: 3年+语义网技术研究经验: 1年+Java Web开发经验(SSH+jQuery).已读过<HTTP权威指南>.有REST架构风格的意识: 粗略读过APUE.UNP第一卷,稍微详细的读过Netty in Action MEAP5. Scope Node.js文件.…
一,操作系统错误. iOS人机界面指南中,Apple建议不要过度使用AlertViews,因为这会破坏设备的使用感受. 操作系统错误: 1,没有网络. 2,无法路由到目标主机. 3,没用应和监听目标端口. 4,无法解析目标主机名. 二,HTTP错误. 404错误是一种常见的HTTP错误,表示找不到URL指定的资源. 一共有5类HTTP错误: 1,信息性质的100级错误. 2,成功的200级错误. 3,重定向需要的300级错误. 4,客户端错误400级别. 5,下游错误500级别. 三,应用错误.…
考虑一个字节是如何从设备发往运程服务器以及如何从远程服务器将这个字节接收到设备,这个过程只需要几百毫秒时间,不过确要求网络设备都能正常工作才行.设备网络和网络互联的复杂性导致了分层网络的产生.分层网络将这种复杂环境划分成了更加易于管理的模块.虽然这对程序员很有帮助,不过当数据在各个层之间流动时可能会产生之前提到的网络错误. 参考资料:<iOS网络高级编程-iPhone和iPad的企业应用开发>…
Apple的Game Kit框架可以实现没有网络状况下的设备与设备之间的通信,这包括没有蜂窝服务,无法访问Wi-Fi基础设施以及无法访问局域网或Internet等情况.比如在丛林深处,高速公路上或是建筑物的地下室等. 一,Game Kit基础 除了底层的网络通信特性外,Game Kit还包含了一些特定于游戏的技术,比如成就,排行榜和比赛等. 蓝牙虽然具有不依赖于网络基础设施的独特优势,不过也有一些较大的缺陷.32英尺的最大接接范围比Wi-Fi网络小太多了,而后者可以跨越多个访问点来覆盖更大范围.…
一,同步请求的最佳实践. 1,只在后台过程中使用同步请求,除非确定访问的是本地文件资源,否则请不要在主线程上使用. 2,只有在知道返回的数据不会超出应用的内存时才使用同步请求.记住,整个响应体都会位于代码的内存中.如果响应很大,那么可能导致应用出现内存溢出问题.此外,当代码将响应解析为所需的格式时可能需要复制返回的数据,这会导致内存增加一倍. 3,在处理返回的数据前,验证错误与调用返回的HTTP响应状态码. 4,如果源URL需要验证,那么不使用同步请求,因为同步框架并不支持对认证请求做出响应.唯…
一,在接口契约中处理错误. 二,错误状态可能不正确. 设备模糊地确认操作是崇拜失败的.比如,移动应用发出HTTP请求以在两个账户间转账.请求被银行系统接收并正确地处理:然而,由于网络失败应答却丢失了,NSURLConnection报告超时.超时发生了,但却是在转账请求成功之后发生的.如果重试该操作,就会导致重复转账,可能会造成用户透支. 三,验证负载. JSON和XML就具备了验证机制的负载格式,不过,以逗号分隔的值文件与HTML就没有这种机制. 四,分离错误与正常的业务状况. 五,总是检查HT…
Bonjour就是这样一种技术:设备可以通过它轻松探测并连接到相同网络中的其他设备,整个过程只需要很少的用户参与或是根本就不需要用户参与.该框架提供了众多适合于移动的使用场景,如基于网络的游戏,设备间的文件共享,甚至是家庭自动化. 一,zeroconf概览. 1,寻址 2,解析 3,探测 二,Bonjour概览 1,发布服务 2,浏览服务 3,解析服务 4,与服务进行通信 三,实现基于Bonjour的应用 1,员工应用 2,顾客应用 四,总结 Bonjour是一项非常棒的技术,可以实现自组织网络…
一,URL方案 URL方案有3个主要用途:根据设备上其他应用的存在与否调整逻辑,切换到其他应用以及响应打开你的应用的其他应用.你还可以通过URL方案从某个站点或是在基于Web的认证流程结束是打开应用. 1,实现自定义的URL方案. 2,感知其它应用的存在. 3,高级通信. 1)base64编码,专门用于将二进制数据表示为ASCII文本字符串.可以使用一个标准化的转换表格将二进制数据的每6位编码为一个字符. 2)要想创建图像数据字符串,需要使用之前介绍的3个步骤.序列化图片,使用base64对其进…
一,本地通知 本地通知有64位的最大限制.虽然,你依然可以调度通知,不过到到达的通知数被限定为接近64个,并且按照fireDate的顺序排序,系统会忽略掉其余的通知.这意味着如果现在有64个调用的本地通知,那么在调用另一个通知会丢弃掉fireDate距当前日期最远的那个通知.循环通知会被当作单个通知,因为它们会自动被系统重新调度.如果超出这个限制,就应该检查一下该如何吸引用户,看看本地通知是否为正确的方式. 二,远程通知 APN负载是JSON对象,并且被严格限制为256字节.需要确保负载不会超过…
一,观测网络流量. 观测网络流量的行为叫做嗅探或数据包分析. 1,嗅探硬件. 从iOS模拟器捕获数据包不需要做特别的硬件或网络配置.如果需要捕获这些数据包,那么可以使用嗅探软件来监听回送设备或是用于连接网络的接口. 2,嗅探软件. OS X自带命令行数据包嗅探器topdump,它是OS X中大多数其他嗅探器的根基. 1)使用tcpdump进行捕获. 2)使用Wireshark进行捕获. 二,操作网络流量 1,配置Charles 2,HTTP断点. 3,重写规则. 三,模拟实现的网络状况. 网络数…
在iOS上,有一个库叫做Core Foundation networking或CFNetwork,它是对原始Socket的轻量级封装,不过它很快对于大多数常见场景来说变得非常笨重了.最后,添加了另一层(NSStream)来封装CFNetwork,并且作为最基础的Objective-C网络API.大家更熟悉的类(比如NSURLConnection与UIWebView)都是非常易于使用的,而且能够通过很少的代码完成很多事情,这都是由于这些底层库所提供的坚实基础而实现的. 一,BSD Socket A…
一,度量网络性能 1,网络带宽 用于描述无线网络性能的最常见度量指标就是带宽.在数字无线通信中,网络带宽可以描述为两个端点之间的通信通道每秒钟可以传输的位数.现代无线网络所能提供的理论带宽是很高的.不过请记住,运营商与网络设备提供商引用的带宽数字常常是该项技术的理论最大值,网络设备使用的实际带宽可能与这个最大值之间存在很大的偏差. 2,网络延迟. 度量网络性能的第2个因素是网络延迟,指的是网络包在两个端点间一次往返所需的时间.无线运营商很少会提到网络的延迟数据,不过延迟却会对应用的实际性能造成很…
一,验证服务器通信. 二,HTTP认证. 手机银行应用有两种认证模式:标准验证与快速验证.标准验证只是提示用户输入用户名与密码,而快速验证则让用户注册设备,然后使用PIN进行验证,每次验证时无需用户名和密码.要想确保快速认证的安全性,如果用户选择在给定的认证请求中注册设备,那么服务器响应就需要包含一个额外的属性,即用户的证书.应用会存储这个证书,并在随后启动时检查,从而确定应该显示哪个认证视图. 1,HTTPBasic,HTTP Digest与NTLM认证. 2,客户端证书认证. 三, 使用哈希…
Web Service可以通过多种格式返回结构化数据, 不过大多数时候使用的是XML与JSON.也可以让应用只接收HTML结构的数据.实现了这些Web Service或是接收HTML文档的应用必须能解释这种结构化数据并将其转换为对于应用上下文有意义的对象. 一,XML 使用原生解析库的另一个考虑因素就是它们是由Apple发布并提供支持的.这意味着它们会针对iOS操作系统未来的每次发布都进行完全的测试以确保向后兼容性.在评估应用中到底该使用哪个解析器时,这些都是要考虑的因素. 二,JSON 从iO…
负载指的是在服务的请求响应事务中交换的数据.常见的负载格式包括XML,JSON与HTML. 进入与发出的负载数据存在很多形式与大小.比如,有些开发者会使用原生的字符串或是以分隔符分开的数据与Web Service进行通信.这么做虽然简单,不过技术上却不具备可扩展性,难以处理复杂的数据结构,可能会导致很多问题. 一,XML XML是一种标记语言,用于编码和组织数据. 二,JSON JSON是一种用于交换格式化信息的轻量级数据格式. JSON支持的数据类型以及与之关联的格式规则: 1,数字:无双引号…
协议指的是在与其它系统交换结构化信息时所要遵循的一套格式,过程与规则.此外,协议定义了在传输过程中所要使用的数据格式.这样,接收系统就能正确地解释结构化信息并做出正应的回应. 1,简单对象访问协议. 简单对象访问协议(SOAP)是个轻量级协议,用于通过可扩展标记语言实现系统间的结构化数据交换.SOAP消息构成了Web Service栈的基础,很多企业建立的服务层都以SOAP作为面向服务架构的基石,可以服务于防火墙内外的客户端. 2,表述性状态转移. 表述性状态转移(REST)是由Roy Fiel…
Cookie是HTTP协议在首个版本之后加入的一个重要组件.它向服务器提供了追踪会话状态的能力,同时又无须维持客户端与服务器之间的连接.在浏览器客户端,Cookie值是由服务器通过请求提供的,,然后被放到随后的请求中.由于设计Cookie的目的是追踪会话状态,因此它们通常会非常小,基本上是几十到几百个字节. 参考资料:<iOS网络高级编程-iPhone和iPad的企业应用开发>    …
异步请求需要运行循环.当数据传递到服务器或是被客户端接收时,运行循环用于实现事件与委托对象之间的通信.异步请求在发出时,会在当前线程的运行循环上操作,这个实现细节是很重要的,因为在GCD块中或者是通过NSOperationQueue创建的线程并没有运行循环.因此,如果在后台线程上发出了异步请求,那么还需要确定线程是有运行循环还是使用了别的运行循环.如下代码片断展示了如何显示地将请求处理指定给运行循环. NSURLConnection connection=[[NSURLConnection al…
一,GET方法. 从服务器获取一段内容,用HTTP术语来说就是实体.GET请求通常不包含请求体,不过也是可以包含的.有些网络缓存设施只会缓存GET响应.GET请求通常不会导致服务器端的数据变化. 二,POST方法. 使用客户端提供的数据更新实体.POST请求通常会在请求体中加入应用服务器所需的信息.POST请求是非幂的,这意味着如果处理多个请求,那么结果与处理单个请求是不同的. 三,HTTP虽然使用了有状态的TCP传输层,但HTTP却是个无状态协议.这意味着HTTP服务器并不会保留关于某个请求的…