iOS 网络相关

作者: A_rcher34 | 来源:发表于2019-05-09 22:35 被阅读4次

    概述

    • URL

      • 什么是URL?

        1. URL的全称是UniformResource Locator(统一资源定位符
        2. URL的基本格式 =协议://主机地址/路径
          1. 协议:不同的协议,代表着不同的资源查找方式、资源传输方式
          2. 主机地址:存放资源的主机(服务器)的IP地址(域名)
          3. 资源在主机(服务器)中的具体位置
      • URL中常见的协议

        1. HTTP : 超文本传输协议, 格式是http://
        2. file :访问的是本地计算机上的资源,格式是file://(不用加主机地址)
        3. mailto:访问的是电子邮件地址,格式是mailto:
        4. FTP:访问的是共享主机的文件资源,格式是ftp://
    • HTTP

      • 介绍
        1. http即超文本传输协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,http协议是网络开发中最常用的协议。

        2. Http协议是建立在TCP协议之上的一种应用,由于HTTP在每次请求结束后都会主动释放连接,因此HTTP连接是一种“短连接”,要保持客户端的在线状态,需要不断的向服务器发起连接请求。

        3. Http是应用层协议,TCP是传输层协议(位于应用层之下)。

        4. 如果访问远程的网络资源,格式是http://

      • http协议的作用
        1. Http的全称是HypertextTransfer Protocol,超文本传输协议
        2. 规定客户端和服务器之间的数据传输格式
        3. 让客户端和服务器能有效地进行数据沟通
    http协议
    • 完整的http通信过程,可以分为2大步骤

      1. 请求 :客户端向服务器索要数据
      2. 响应:服务器返回客户端相应的数据
    • 发送Http请求的方法

      1. 在HTTP/1.1协议中,定义了8种发送http请求的方法
      2. 最常用的是GET和POST(实际上GET和POST都能办到增删改查)
    • GET和POST对比
      • 主要表现在数据传递上

      • GET:

        1. 在请求URL后面以?的形式跟上发给服务器的参数,多个参数之间用&隔开
        2. 由于浏览器和服务器对URL长度有限制,因此在URL后面附带的参数是有限制的,通常不能超过1KB
      • POST:

        1. 发给服务器的参数全部放在请求体
        2. 理论上,POST传递的数据量没有限制
    • GET和POST的选择
      1. 如果要传递大量数据,比如文件上传,只能用POST请求
      2. GET的安全性比POST要差些,如果包含机密\敏感信息,建议用POST
        如果仅仅是索取数据(数据查询),建议使用GET
        如果是增加、修改、删除数据,建议使用POST
    • iOS中发送Http请求的方案

      • 苹果原生(自带)
        1. NSURLConnection:用法简单,最古老最经典最直接的一种方案【坑比较多,已经弃用】
        2. NSURLSession:功能比NSURLConnection更加强大,苹果目前比较推荐使用这种技术【2013推出,iOS7开始出的技术】
        3. CFNetwork:NSURL*的底层,纯C语言
      • 第三方框架
        1. ASIHttpRequest:外号“HTTP终结者”,功能极其强大,可惜早已停止更新
        2. AFNetworking:简单易用,提供了基本够用的常用功能,维护和使用者多
        3. MKNetworkKit:简单易用,产自三哥的故乡印度,维护和使用者少
    • Http通信过程

      • 请求

        HTTP协议规定:1个完整的由客户端发给服务器的HTTP请求中包含以下内容 : 请求头、请求体

        请求头:包含了对客户端的环境描述、客户端请求信息等

        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请求才会有)

      • 响应

        客户端向服务器发送请求,服务器应当做出响应,即返回数据给客户端

        HTTP协议规定:1个完整的HTTP响应中包含以下内容

        响应头: 包含了对服务器的描述、对返回数据的描述

        HTTP/1.1 200 OK            //包含了HTTP协议版本、状态码、状态英文名称
        Server:Apache-Coyote/1.1   //服务器的类型
        Content-Type: image/jpeg  //返回数据的类型
        Content-Length: 56811  //返回数据的长度
        Date: Mon, 23 Jun2014 12:54:52 GMT  //响应的时间
        

        响应体:服务器返回给客户端的具体数据,比如文件数据

    • TCP与UDP

      • TCP与UDP的区别
        1. TCP:面向连接、传输可靠(保证数据正确性,保证数据顺序)、用于传输大量数据(流模式)、速度慢,建立连接需要开销较多(时间,系统资源)。

        2. UDP:面向非连接、传输不可靠、用于传输少量数据(数据包模式)、速度快。

      • TCP三次握手:

        指建立一个TCP连接时,需要客户端和服务器总共发送3个包。

        第一次握手:客户端发送一个TCP的SYN标志位置1的包指明客户打算连接的服务器的端口,以及初始序号X,保存在包头的序列号(Sequence Number)字段里。

        第二次握手:服务器发回确认包(ACK)应答。即SYN标志位和ACK标志位均为1同时,将确认序号(Acknowledgement Number)设置为客户的序列号加1以,即X+1。

        第三次握手:客户端再次发送确认包(ACK) SYN标志位为0,ACK标志位为1。并且把服务器发来ACK的序号字段+1,放在确定字段中发送给对方.并且在数据段放写序列号的+1。

    TCP三次握手
    • 开发时到底选择TCP还是UDP:

      • 如果是由客户端间歇性的发起无状态的查询,并且偶尔发生延迟是可以容忍,那么使用HTTP/HTTPS吧。

      • 如果客户端和服务器都可以独立发包,但是偶尔发生延迟可以容忍(比如:在线的纸牌游戏,许多MMO类的游戏),那么使用TCP长连接吧。

      • 如果客户端和服务器都可以独立发包,而且无法忍受延迟(比如:大多数的多人动作类游戏,一些MMO类游戏),那么使用UDP吧。

    参考文献

    相关文章

      网友评论

        本文标题:iOS 网络相关

        本文链接:https://www.haomeiwen.com/subject/czdqnqtx.html