HTTP:
URL:
全称是Uniform Resource Locator( 统一资源定位符)
通过1个URL,能找到互联网唯一的一个资源
每一个资源都有一个唯一的URL
URL格式:
基本格式:协议头://主机地址/路径
协议头:不同的协议,表示不同的资源查找及传输方式。例如http,afp等
主机地址:存放资源主机的IP地址(域名)
路径:在主机地址每个资源的具体位置
HTTP协议:
http的全称是Hypertext Transfer Protocol,超文本传输协议
规定客户端和服务器之间的数据传输的格式
让客户端和服务器能够进行数据沟通
HTTP协议是网络编程中最为广泛的协议
HTTP协议的特点
1、快速简单:因为HTTP协议简单,所以HTTP服务器的程序规模小,通讯速度快
2、灵活:HTTP允许传输任意类型的数据
3、HTTP 0.9和1.0使用的是非持续连接:限制每次连接只处理一个请求,服务器对客户端的请求做响应过后立刻断开连接,这种方式可以节省传输时间
4、HTTP 1.1使用的是持续连接: 不必为每个web对象创建一个新的连接,同时一个连接可以传送多个对象
HTTP通信过程
请求
HTTP协议规定:一个完成的有客户端发给服务器的HTTP奇怪呢求,要包含以下内容
请求行:指定请求方法、请求资源路径以及HTTP协议版本 #表示访问根目录# GET / HTTP/1.1
请求头:对客户端的环境描述、客户端请求的主机地址等信息
请求头中至少包含:#客户端要访问的服务器主机的地址# Host:m.baidu.com
请求头中还可以包含以下信息:
#客户端的类型,客户端的软件环境# User-Agent:iPhone AppleWebKit
#客户端能接受的数据类型# Accept : text/html
#客户端的语言环境#Accept-Language:zh-cn
#客户端支持的数据压缩格式# Accept-Encoding:gzip
#访问结束后,是否断开连接# Connection:Close
请求体(可选):客户端发给服务器的具体数据,例如要上传的文件数据
格式:每一项请求信息末尾使用\r\n,最后一个请求后再加\r\n (就是说最后一个请求信息后面为\r\n\r\n);
响应
HTTP协议规定:一个完整的HTTP响应应该包含以下内容
状态行:包含了HTTP协议版本、状态码、状态英文名称
#请求成功 HTTP/1.1 200 OK 状态码为200开头的都是成功的
响应头:包含了对服务器的描述、对返回数据的描述
#服务器类型 Server...
#返回数据的类型 Contect-Type:
#返回数据的长度 Contect-Length:
#反应时间 Date...
#ETag(哈希值): ETa.g:"xxxxxxx";
实体内容:服务器返回给客户端的具体的二进制数据
*状态行和响应头是给开发人员调试的,实体内容是给用户看的
开发方案
苹果官方提供三种方案
1、NSURLConnection :iOS2.0推出、用法简单、最古老最直接的一种方案
2、NSURLSecssion:iOS7推出,功能比NSURLConnection更加强大
3、CFNetwork:NSURL的底层、纯C语言、几乎不用
第三方框架
ASIHttpRequest:底层为CFNetwork 外号为HTTP终结者,功能极其强大,2012年停止更新,基于MRC
AFNetworking:底层为NSURLConnection&NSURLSecssion 简单易用,能够实现基本功能,维护和使用人多
MKNetworkKit: 底层为NSURLConnection 简单易用,维护和使用人少
Alamofire :底层为NSURLSession 基于Swift 轻量级开发,功能远不如AFNetworking
NSURLConnection
步骤
1、NSURL:确定要访问的资源
2、NSURLRequest:根据URL简历请求,向服务器索要数据
3、NSURLConnertion:建立网络连接,讲请求(异步)发送给服务器
eg:
//1.创建想要访问的资源
NSURL *url=[NSURL URLWithString:@"http://m.baidu.com"];
//2.向服务器请求数据
NSURLRequest *request=[NSURLRequest requestWithURL:url];
//3.建立网络连接
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response,NSData *data, NSError *connectionError) {
NSLog(@"%@",data);
}];
NSURLConnection总结:
sendAsynchronousRequest:这个方法是异步窒息功能的,程序员不需要考虑是否开线程或者创造队列,会将之前建好的请求异步发送给服务器。等到接受到服务器响应后,由queue负责调度comloetionHandler
队列
调度completionHandler执行的队列
[[NSOperationQueue alloc]init],后台线程异步执行
[NSOperationQueue mainQueue], 主线程异步执行
队列的选择:
如果要对数据进行耗时处理,例如:解压压缩等,选择新建队列调度
如果只是要简单处理,立即更新UI,选择主队列
completionHandler
网络访问已经结束,接受到服务器响应数据后的回调方法
response,服务器的响应,通常在开发下载功能时才会调用
响应属性介绍:
URL 服务器反馈的URL,有的时候,服务器会重新定向新的URL
MIMEType 服务器告诉客户端,返回二进制数据类型,ContentType 根据MIMEType客户端就知道使用什么软件处理返回的什么样的数据。
statusCode 状态码:1XX 消息 2XX成功 3XX更多选择 4XX客户端错误 5XX服务器错误
expectedContentLength 数据长度,下载文件总长度
suggestedFilename 建议的文件名
data 服务器返回的二进制数据,程序员最关心的内容
connectionError 连接错误,任何网络访问都有可能出现错误
请求简介
基于URL建立请求
设置请求属性:缓存策略,网络超时市场
告诉服务器额外的信息:客户端类型,身份验证等...
[request setValue:@"iPhone AppleWebKit" forKey:@"User-Agent"];