一 、HTTP 和 HTTPS 协议
 
1 网络七层模型 (网络体系结构参考模型OSI)
 物理层:用作机械、电子、定时接口通信信道上的原始比特流(bites二进制流)传输
 数据链路层:物理寻址,同时将原始比特流转变为逻辑传输线路
 网络层:控制子网的运行,如逻辑编址,分组传输,路由选择
 传输层:接收上层数据,在必要的时候,把数据进行分割,并将这些数据交给网络层,且保证这些数据能够有效到达对端
 会话层:不同机器之间建立以及管理会话
 表示层:信息的语法,语义,以及他们的关联,如加密解密,翻译装换,压缩解压缩
 应用层:提供用户程序接口,各种应用程序协议。HTTP、FTP、SMTP、POP3
 
1.1 共分为7 层: 物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。会话层、表示层和应用层往往被合并称为高层网络协议, 因此整个网络体系结构也可分为物理层协议、数据链路层协议、网络层协议、传输层协议及高层协议。通常, 一个协议可以实现OSI 的一层或多层功能。从应用上来讲, 网络协议可分为局域网协议、广域网协议和路由选择协议。
 
2 URL 
2.1 URL全称 Uniform Resource Locator (统一资源定位符),通过一个URL,能找到互联网上唯一的1个资源
2.2 URL就是资源的地址、位置,互联网上的每个资源都有一个唯一的URL
2.3 URL基本格式 = 协议://主机地址/路径
a  协议:不同的协议,代表着不同的资源查找方式,资源传输方式
b 主机地址:存放资源的主机的 IP 地址(域名)
c 路径 : 资源在主机中的位置
 
3 协议的定义
定义:两个计算机间通信时对传输信息内容的理解、信息表示形式以及各种情况下的应答信号都必需进行一个共同的约定,我们称为协议(Protocol)。一般来说,协议要由如下三个要素组成:
(1)语义(Semantics)涉及用于协调和差错处理的控制信息
(2)语法(Syntax)涉及数据及控制信息的格式、编码及信号电平等。
(3)定时(Timing)涉及速度匹配和排序等
 
4 常见的协议
a ftp ://(文件传输协议)
b http://(超文本传输协议)
c https://(安全超文本传输协议)
d files://(本地文件协议)
 
 
5 HTTP协议(Hyper Text Transfer Protocol)
5.1 HTTP:超文本传输协议,属于应用层,由请求/响应构成(客户端向服务器发送一个请求报文,服务器以一个状态作为响应),是一个标准的客户端服务器模型。
5.2 作用:是用于从万维网(www)服务器传送超文本到本地浏览器的传输协议
5.3 工作原理:HTTP 协议采用请求/响应模型.客户端向服务器发送一个请求报文,服务器以一个状态作为响应
5.4 C/S 模式 Client(客户端)  Server(服务器)
Client 和 Server 通常分别处在相距很远的两台计算机上;
Client程序的任务是将用户的要求交给Server程序,再将Server程序返回的结果以特定的形式显示给用户;
Server程序的任务是接收客户程序提出的服务请求,进行相应的处理,再将结果返回给客户程序
5.5 HTTP通常承载与TCP协议之上,有时候也承载于TLS或者SSL协议之上,这个时候就构成了我们所说HTTPS协议
a SSL (安全套接字层) :是 Netscape公司提出的安全保密协议,在浏览器(如Internet Explore等)和 Web 服务器之间构造安全通道来进行数据传输,SSL运行在 TCP/IP 层之上、应用层之下,为应用程序提供加密数据通道
b TLS
 
6 HTTPS 协议(Secure Hypertext Transfer Protocol)
6.1 HTTPS (S-HTTP):增强版的HTTP,比HTTP更加安全,在HTTP基础上与安全套接子层(SSL)结合,把原始数据进行加密,然后接受对方解密,加密和解密需要发送和接收方交换公知的密匙来实现,所以,更加安全。
6.2 默认端口号:HTTP(80)、HTTPS(443)
6.3 注意:
a HTTP协议,永远的都是由客户端发起请求,服务器返回数据
b HTTP协议是无状态,同一个客户端的这次请求,和上一次没有对应关系
c HTTPS协议需要到CA(由受信任数字证书颁发机构(沃通CA)在验证服务器身份后,具有服务器身份验证的和数据传输加密功能,因其需要配置在服务器上,所以也成SSL服务器,或者SSL证书)申请证书,一般免费证书很少,需要交费
 
7 HTTP和HTTPS 的异同
7.1   HTTP     HTTP(应用层)->TCP(传输层)->IP(网络层)->网络接口(数据链路层)
         HTTPS    HTTP(应用层)->TSL or SSL (安全层)->TCP(传输层)->IP(网络层)->网络接口(数据链路层)
7.2  HTTPS 协议需要到 ca 申请证书,一般免费证书很少,需要交费
7.3 HTTP 是超文本传输协议,信息是明文传输
       HTTPS 则是具有安全性的 SSL 加密传输协议
7.4 HTTP 和 HTTPS 使用的完全不同的链接方式,用的端口也不一样,前者是80,后者是443
7.5 HTTP 的链接很简单,是无状态的
       HTTP协议是由 SSL+HTTP 协议构建的可进行加密传输,身份认证的网络协议,要比 http 安全
 
二 、HTTP 协议的常见请求方式
1  1 最基本的请求方式:GET,POST,PUT,DELETE,这四种请求方式对应着对资源的查、改、增、删 4 种操作
0,GET:GET可以说是最常见的了,它本质就是发送一个请求来取得服务器上的某一资源。资源通过一组HTTP头和呈现数据(如HTML文本,或者图片或者视频等)返回给客户端。GET请求中,永远不会包含呈现数据。   
1,HEAD:HEAD和GET本质是一样的,区别在于HEAD不含有呈现数据,而仅仅是HTTP头信息。有的人可能觉得这个方法没什么用,其实不是这样的。想象一个业务情景:欲判断某个资源是否存在,我们通常使用GET,但这里用HEAD则意义更加明确。   
2,PUT:这个方法比较少见。HTML表单也不支持这个。本质上来讲, PUT和POST极为相似,都是向服务器发送数据,但它们之间有一个重要区别,PUT通常指定了资源的存放位置,而POST则没有,POST的数据存放位置由服务器自己决定。举个例子:如一个用于提交博文的URL,/addBlog。如果用PUT,则提交的URL会是像这样的”/addBlog/abc123”,其中abc123就是这个博文的地址。而如果用POST,则这个地址会在提交后由服务器告知客户端。目前大部分博客都是这样的。显然,PUT和POST用途是不一样的。具体用哪个还取决于当前的业务场景。   
3,DELETE:删除某一个资源。基本上这个也很少见,不过还是有一些地方比如amazon的S3云服务里面就用的这个方法来删除资源。   
4,POST:向服务器提交数据。这个方法用途广泛,几乎目前所有的提交操作都是靠这个完成。   
5,OPTIONS:这个方法很有趣,但极少使用。它用于获取当前URL所支持的方法。若请求成功,则它会在HTTP头中包含一个名为“Allow”的头,值是所支持的方法,如“GET, POST”。   
6, 其实还有一个TRACE方法,不过这个基本上不会用到,这里就不介绍了。
以上的六种方法,我们可以跟数据库的CRUD增删改查操作对应起来:   CREATE :PUT   READ:GET   UPDATE:POST   DELETE:DELETE   这样一来就实现了HTTP和数据库操作( 其实不光是数据库,任何数据如文件图表都是这样)的完美统一,这也是REST的精髓之一
7 最常用方法
 GET:一般用于获取或查询资源,也就是说如果请求 URL 是一个产生数据的过程,使用GET的话,需要的是产生的数据结果,而不是对产生过程的描述(如何产生数据的)
 POST:一般用于更新数据,向服务器发送请求,告知服务器接收请求后面的实体(BODY),也就是说,POST向服务器发送请求信息,而需要提交的数据在信息后面的实体中。
7.1 比较
相同点:都能给服务器传输数据
不同点:
a 给服务器传输数据的方式不同
GET :通过网址字符串
POST:通过Data
b 传输数据的大小
GET:网址字符串最多255字节
POST:使用NSData,容量超过1G
c 安全性
GET:所有传输给服务的数据,显示在网址里,类似于密码的明文输入,直接可见
POST:数据被转成NSData(二进制数据),类似于密码的密文输入,无法直接读取
三、iOS实现网络编程
1 几个对象
1.0 NSURL:请求地址
url:统一资源定位符,也被称为网址,英特网上标准的资源网址
url的符语法:协议://授权/路径?查询
url的作用:url作为网址字符串包含很多请求参数,NSURL对网址字符串进行封装,可以使用NSURL对象获取相应的参数
1.1 NSURLRequest(网络请求地址对象)
封装一个请求,保存发给服务器的全部数据,包括一个NSURL 对象,请求方法、请求头、请求体
注意:任何 Request 默认都是get 方法
1.2 NSMutableURLRequest(网络请求对象)
NSURLRequest的子类
1.3 NSURLConnection(网络链接对象)
负责发送请求,建立客户端和服务器的连接。发送NSURLRequest 的数据给服务器,并收集来服务器的响应数据
1.4 NSURLConnectionDelegate(网络链接协议)
有两个子类 NSURLConnectionDataDelegate、NSURLConnectionDownloadDelegate
 
 
 
 
2 连接方式
2.1 同步连接:程序容易出现卡死现象
GET同步;POST同步
2.2  异步连接:等待数据返回
a 异步连接有两种实现方式:
b 实现 block
2.3 掌握代码实现
 
四 、iOS7 之后请求变化
  • 在WWDC 2013中,Apple的团队对NSURLConnection进行了重构,并推出了NSURLSession作为替代。
  • 支持后台运行的网络任务
  • 暂停、停止、重启网络任务,不再需要 NSOpation 封装
  • 请求可以使用同样的配置容器
  • 不同的 session 可以使用不同的私有存储,block和代理可以同时起作用
  • 直接从文件系统上传、下载
  • 为了方便程序员使用,苹果提供了一个全局 session
  • 所有的 任务(Task) 都是由 Session 发起的
  • 所有的任务默认是挂起的,需要 Resume

注意:若网址字符串URLString中有类对象,可以使用此方法处理:

  [URLString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
1  解析步骤
2 NSURLSession 的三种工作模式
2.1 默认会话模式:类似与原来的 NSURLConnection ,使用的是基于磁盘缓存的持久化策略,使用用户 keychain 中保存的证书进行认证授权
2.2 瞬时会话模式:该模式不会使用磁盘保存任何数据,所有和会话相关的 caches证书,cookies 都被保存在 ROM(内存中),因此当程序是会话无效的时候,这些缓存,就会被自动清空。
2.3 后台会话模式:该模式在后台完成上传和下载,在创建配置对象时,需要一个NSString 类型的ID,用于标识完成工作的后台会话。
3 支持三种类型的任务:加载数据,下载数据,上传
4  NSURLSessionTask类:是一个抽象子类,有三个子类:NSURLSessionDataTask、NSURLSessionUploadTask、NSURLSessionDownloadTask。这三个类封装了现代应用程序的三个基本网络任务:获取数据,比如 JSON或XML,以及上传和下载
5 NSURLSessionTask 代理   
NSURLSessionTaskDelegate 继承与NSURLSessionTaskDelegate;NSURLSessionTaskDelegate继承于 NSURLSessionDelegate 
NSURLSessionConfiguration:用于配置会话的属性可以通过该类配置会话的工作模式
7 适合小的数据访问:JSON、XML、Plist、HTML、图像 
 
五:临时数据加载设置
NSAppTransportSecurity
 
NSAllowsArbitraryLoads