1、简单说明
ios中的客户端需要和后台服务器进行网络通信,这样才可以获得实时的数据,如新浪微博。而不管是移动端还是PC端,访问远程的网络资源使用最多的是HTTP协议。
2、互联网协议
互联网可以看作分层的结构,通常使用OSI七层模型或者使用TCP/IP四层模型来描述。这里分为五层,更容易理解些。
如上所示,上一层依赖于下一层。一句话概括每一层的作用,可以说:
实体层实现了物理上的链接。
链接层可以在同一个子网内根据MAC地址主机到主机的连接。
网络层使用IP协议实现不同子网内主机到主机的链接。
传输层则根据通信的具体需求使用TCP/UDP实现端口到端口的连接。
应用层是最上层,具体应用使用不同的通信协议,如http、ftp。
在PC(ios上应用类似)上访问网页的整个过程如下:
—>1、打开浏览器,想要访问google,在地址栏输入网址www.google.com
这样,浏览器发送了一个网页请求的数据包。
—>2、DNS协议
我们知道,不在同一个子网内的两个主机进行数据通信,必须要知道对方的IP地址,但是,现在只知道网址www.google.com,不知道它的IP地址。
DNS协议可以帮助我们,将网址转换成IP地址。我们向DNS服务器发送一个数据包,然后DNS服务器做出响应,告诉我们这个网址对应的IP地址是172.194.72.105.
—>3、网关转发
使用子网掩码,判断目的主机是不是在当前子网内,如果不在进行转发,一直找到所在的那个子网。
—>4、服务器端响应
经过多个网关的转发,google的服务器172.194.72.105收到了数据包。此时数据包包括4个部分
浏览网页用的是http协议。
TCP部分,包括了收发双方的端口。实现端到端的通信。
IP部分,是双方的IP地址。
以太网协议,包括双方的MAC地址。
根据IP标头的序号,服务器端将四个包拼起来,取出完整的TCP数据包,然后读出里面的HTTP请求,接着做出HTTP响应,再用TCP协议发送回来。
本机收到HTTP响应以后就可以将网页显示出来,完成了一次完整的网络通信。
3、HTTP协议
所以http协议是由应用层发出的,在ios上可由客户端一次点击视频播放或者刷新操作发起。整个过程简单看成如下:
1)请求
i)客户端——>服务器
ii)请求的内容:
a:请求行(请求方法\http协议版本\请求资源路径)如
GET /MJServer/resources/images/1.jpg HTTP/1.1
b:请求头(描述客户端的信息)
Host: 192.168.1.105:8080 // 客户端想访问的服务器主机地址
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9) Firefox/30.0// 客户端的类型,客户端的软件环境
Accept: text/html, */*// 客户端所能接收的数据类型
Accept-Language: zh-cn // 客户端的语言环境
Accept-Encoding: gzip // 客户端支持的数据压缩格式
c:请求体(只有post请求才需要有,存放具体的数据)
2)响应
i)服务器——>客户端
ii)响应的内容
a:状态行(响应行,状态码、状态英文名称)
HTTP/1.1 200 OK
b:响应头(服务器信息,返回数据的类型,返回数据的长度)
Server: Apache-Coyote/1.1 // 服务器的类型
Content-Type: image/jpeg // 返回数据的类型
Content-Length: 56811 // 返回数据的长度
Date: Mon, 23 Jun 2014 12:54:52 GMT // 响应的时间
c:实体内容(响应体,返回给客户端的具体内容)
4、ios中发送HTTP请求的方案
在iOS中,常见的发送HTTP请求(GET和POST)的解决方案有
(1)苹果原生(自带)
NSURLConnection:用法简单,最古老最经典最直接的一种方案
NSURLSession:iOS 7新出的技术,功能比NSURLConnection更加强大
CFNetwork:NSURL*的底层,纯C语言
(2)第三方框架
ASIHttpRequest:外号“HTTP终结者”,功能极其强大,可惜早已停止更新
AFNetworking:简单易用,提供了基本够用的常用功能
建议:
为了提高开发效率,企业开发用的基本是第三方框架
参考:
http://kb.cnblogs.com/page/144577/
http://www.cnblogs.com/wendingding/p/3813466.html
转载于:https://www.cnblogs.com/harrytien/p/4066140.html