网络(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.
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,425评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,058评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,186评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,848评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,249评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,554评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,830评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,536评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,239评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,505评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,004评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,346评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,999评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,060评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,821评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,574评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,480评论 2 267

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,099评论 18 139
  • 一、概念(载录于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434阅读 8,295评论 6 152
  • API定义规范 本规范设计基于如下使用场景: 请求频率不是非常高:如果产品的使用周期内请求频率非常高,建议使用双通...
    有涯逐无涯阅读 2,441评论 0 6
  • 本篇文章篇幅比较长,先来个思维导图预览一下。 一、概述 1.计算机网络体系结构分层 2.TCP/IP 通信传输流 ...
    涤生_Woo阅读 54,501评论 24 555
  • HTTP概述 超文本传输协议(HTTP,HyperText Transfer Protocol) 是互联网上应用最...
    曹渊说创业阅读 3,788评论 2 61