01 网络基本概念
1-1 客户端(就是手机或者ipad等手持设备上面的APP)
1-2 服务器(远程服务器-本地服务器)
1-3 请求(客户端索要数据的方式)
1-4 响应(需要客户端解析数据)
1-5 数据库(服务器的数据从哪里来)
02服务器
2-1 远程服务器
1 别名:外网服务器、正式服务器
2 使用阶段:应用上线后使用的服务器
3 使用人群:供全体用户使用
4 速度:取决于服务器的性能、用户的网速
2-2 本地服务器
1 别名:内网服务器、测试服务器
2 使用阶段:应用处于开发、测试阶段使用的服务器
3 使用人群:仅供公司内部的开发人员、测试人员使用
4 速度:由于是局域网,所以速度飞快,有助于提高开发测试效率
-
03 Http
01 URL 1-1 如何找到服务器(通过一个唯一的URL) 1-2 URL介绍 a. 统一资源定位符 b. url格式(协议\主机地址\路径) c. 协议:不同的协议,代表着不同的资源查找方式、资源传输方式 d. 主机地址:存放资源的主机(服务器)的IP地址(域名) e. 路径:资源在主机(服务器)中的具体位置 1-3 请求协议 【file】访问的是本地计算机上的资源,格式是file://(不用加主机地址) 【ftp】访问的是共享主机的文件资源,格式是ftp:// 【mailto】访问的是电子邮件地址,格式是mailto: 【http】超文本传输协议,访问的是远程的网络资源,格式是http://(网络请求中最常用的协议) 02 http协议 2-1 http协议简单介绍 a.HTTP的全称是Hypertext Transfer Protocol,超文本传输协议 b.规定客户端和服务器之间的数据传输格式 c.让客户端和服务器能有效地进行数据沟通 2-2 http协议优缺点 a.简单快速(协议简单,服务器端程序规模小,通信速度快) b.灵活(允许传输各种数据) c.非持续性连接(1.1之前版本是非持续的,即限制每次连接只处理一个请求,服务器对客户端的请求做出响应后,马上断开连接,这种方式可以节省传输时间) 2-3 基本通信过程 a.请求:客户端向服务器索要数据 b.响应:服务器返回客户端相应的数据 03 GET和POST请求 3-1 http里面发送请求的方法 GET(常用)、POST(常用)、OPTIONS、HEAD、PUT(增)、DELETE(删)、TRACE、CONNECT、PATCH 3-2 GET和POST请求的对比【区别在于参数如何传递】 GET a. 在请求URL后面以?的形式跟上发给服务器的参数,多个参数之间用&隔开,比如 http://ww.test.com/login?username=123&pwd=234&type=JSON b. 由于浏览器和服务器对URL长度有限制,因此在URL后面附带的参数是有限制的,通常不能超过1KB POST a. 发给服务器的参数全部放在请求体中 b.POST请求需要把参数转换为二进制数据设置请求体 c. 理论上,POST传递的数据量没有限制(具体还得看服务器的处理能力) d.POST请求创建的请求对象要求是可变的,且需要修改请求方法为POST。 3-3 如何选择:除数据查询外,其它的一律使用POST请求 04 iOS中发送http请求的方案 4-1 苹果原生 NSURLConnection 03年推出的古老技术【坑比较多】 NSURLSession 13年推出iOS7(13年)之后,以取代NSURLConnection【重点】 CFNetwork NSURL*的底层技术、C语言的 4-2 第三方框架 ASIHttpRequest:外号“HTTP终结者”,功能极其强大,可惜早已停止更新 AFNetworking【重点】:简单易用,提供了基本够用的常用功能,维护和使用者多 MKNetworkKit:上手有一定难度,产自三哥的故乡印度,维护和使用者少
05 http请求通信过程 请简单说明HTTP通信的过程?答:完整的HTTP通信包括两个部分,即请求和响应。 1)请求是客户端向服务器索要数据的行为,请求包括两个部分,一个是请求头,一个是请求体。 (1)请求头中存放着对客户端以及本次请求的一些描述信息(如客户端环境,能够接收的数据类型等) (2)请求体中存放参数(GET请求没有请求体) 2)当接收到客户端的请求后,服务器会对该请求进行响应。响应包括两部分,一个是响应头,一个是响应体。 (1)响应头中存放着对服务器端的一些描述信息(如服务器的类型,响应的时间等) (2)响应体中存放中服务端返回给客户端的数据,通常我们在开发中要解析的是响应体信息。 3)其它。在开发中我们可能需要对请求头进行必要的设置,如告知服务端请求客户端的类型等,而响应头内部(状态行)的信息可以帮助我们进行接口调试,如响应状态码等等。 5-1 请求 【包括请求头+请求体·非必选】 请求头:包含了对客户端的环境描述、客户端请求信息等 GET /minion.png HTTP/1.1 //包含了请求方法、请求资源路径、HTTP协议版本 Host: 120.25.226.186:32812 //客户端想访问的服务器主机地址 User-Agent: Mozilla/5.0 //客户端的类型,客户端的软件环境 Accept: text/html, // 客户端所能接收的数据类型 Accept-Language: zh-cn // 客户端的语言环境 Accept-Encoding: gzip // 客户端支持的数据压缩格式 请求体:客户端发给服务器的具体数据,比如文件数据(POST请求才会有) 5-2 响应 【响应头+响应体】 响应头:包含了对服务器的描述、对返回数据的描述 HTTP/1.1 200 OK // 包含了HTTP协议版本、状态码、状态英文名称 Server: Apache-Coyote/1.1 // 服务器的类型 Content-Type: image/jpeg // 返回数据的类型 Content-Length: 56811 // 返回数据的长度 Date: Mon, 23 Jun 2014 12:54:52 GMT // 响应的时间 响应体:服务器返回给客户端的具体数据,比如文件数据 5-3 通信过程 a.发送请求的时候把请求头和请求体(请求体是非必须的)包装成一个请求对象 b.服务器端对请求进行响应,在响应信息中包含响应头和响应体,响应信息是对服务器端的描述,具体的信息放在响应体中传递给客户端
4.NSURLConnection(过期)
5.NSURLSession
6.AFN框架
7.网络请求优化
- 网络请求性能优化的出发点:
1. 努力消除或减少不必要的网络延迟;
2. 将需要传输的数据压缩至最少。 - 性能优化具体实现:
1. 减少DNS查找。每次主机名的解析都需要 次 络往返,从 增加请求的延迟时间,同时 还会阻塞后续的请求。
2. 重用TCP连接。尽可能的使用持久连接,以消除因TCP握 和慢启动导致的延迟。
3. 减少HTTP重定向。HTTP重定向需要额外的DNS查询、TCP握 等非常耗时,最佳的重定向次数为0。
4. 使用CDN(内容分发网络)。把数据放在离用户地理位置更近的地 ,可以明显减少每 次TCP连接的 络延迟,增 吞吐量。
5. 删除不必要请求的资源。
6. 在客户端缓存资源。缓存必要的应用资源,避免每次请求都请求相同的内容,如多图片下载可以考虑使用缓存。
7. 内容在传输前先压缩。传输数据之前应该压缩应用资源,把要传输的字节减少到最小,在压缩的时候确保对每种不同的资源采用最好的压缩字段。
8. 消除不必要的请求开销。减少请求的HTTP首部数据(比如HTTP cookie)。
9. 并行处理请求和响应。请求和响应的排队都会导致延迟,可以尝试并 的处理请求和响应。(利用多个HTTP/1.1连接实现并 下载|在可能的情况下利用HTTP管道技术|考虑升级到HTTP/2.0以提升性能)
10. 针对协议版本采取优化措施。如升级HTTP/1.1协议版本到2.0等。 - 其它说明
1. TCP连接数量 == 6
由于HTTP/1.1不支持多路复用,因此如果要处理多个网络请求,在处理HTTP请求的时候,多数浏览器厂商都是不假思索的就在客户端排队所有的HTTP请求,然后通过一个持久连接,一个接着一个的发送这些请求。然而这种方式性能实在太差。实际上,浏览器开发商对于对于此性能问题,尚没有任何更好的办法,因此只能允许客户端并行打开多个TCP连接会话。但是具体最多可以打开多少个TCP连接是有数量限制的,多数现代的浏览器,包括桌面和移动浏览器,都支持打开6个连接。即客户端可以并行分派最多6个请求,服务器可以并行处理最多6个请求。
2. 为什么是6个连接?有什么特殊的意义吗?
这个数字是多方平衡后的结果:这个数字越大,能够带来更多的请求并行能力,但是同样的客户端课服务器端所占用的资源也会越多。因此,每个主机6个连接只不过是大家都觉得比较安全,能够接受的一个数字。
在iOS中NSURLSessionConguration内部有HTTPMaximumConnectionsPerHost属性,可以设置连接的数量:The default value is 6 in OS X, or 4 in iOS.