网络(Network)

01 网络基本概念
    1-1 客户端(就是手机或者ipad等手持设备上面的APP)
    1-2 服务器(远程服务器-本地服务器)
    1-3 请求(客户端索要数据的方式)
    1-4 响应(需要客户端解析数据)
    1-5 数据库(服务器的数据从哪里来)
网络编程基本概念.png
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. 网络请求性能优化的出发点:
    1. 努力消除或减少不必要的网络延迟;
    2. 将需要传输的数据压缩至最少。
  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等。
  3. 其它说明
    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.

你可能感兴趣的:(网络(Network))