iOS 网络基本剖析
一、网络通信的本质
数据传输,数据交换
Client 《======》 服务器
二、HTTP、TCP,IP、UDP、Socket关系刨析
Socket:套接字,是一个用于网络传输数据的工具
1.TCP/IP:传输协议,用于定义网络传输数据格式
2.UDP:传输协议,用于定义网络传输数据格式
HTTP:超文本传输协议,用于定义网络传输数据的格式(短连接)
http请求,只能给服务器发,客户端不能接受http请求
XMPP:(基于TCP/IP协议封装的一套协议,不属于网络通用的 )
长短链接的区别:
长连接(TCP)
三、HTTP协议中的请求类型(增/PUT、删/DELETE、查/GET、改POST)
还有OPTION/HEAD/TRACE/CONNECT 等,其中最主要的,也是最常用的为GET、POST
四、HTTP请求的组成部分
http 一般情况下包含三个部分:请求行,请求头,请求体
- 请求行(Request Line)
请求行由三个标记组成:请求方法、请求 URI 和 HTTP 版本,它们用空格分隔。
例如:GET /news.asp HTTP/1.1
- 消息头(Message Headers)
由域名/值对组成,每行一对,域名和值之间用紧跟的英文冒号(“:”),单空格(SP)分开。消息头通知服务器有关于客户端的功能和标识。如 Host: http://demo.com:80 表示请求的资源所在的主机和端口号,在 HTTP/1.1 协议中,Host 消息头是必选的。还可以有其他一些如 Accept-Charset、Accept-Encoding、Authorization 等等,详见 RFC1945,RFC2616。
- 消息体(Entity Body)<只有在POST请求中才有消息体>
HTTP 消息的消息体(如果存在),用于携带与请求相关联的数据,例如可以存一些请求需要的参数等。由消息头中的 Content-Length 或 Transfer-Encoding 来指示。消息头里的 Content-Type 说明了数据的传输类型。
下面是一个HTTP请求的例子:
————————————————————————请求行————————————————————————————
GET/sample.jspHTTP/1.1 //请求方式,URL,协议版本
————————————————————————分割线————————————————————————————
Accept:image/gif.image/jpeg,*/* //客户端 可接受数据类型
Accept-Language:zh-cn // 客户端的语言环境
Host:localhost // 客户端祥访问的服务器主机地址
User-Agent:Mozila/4.0(compatible;MSIE5.01;Window NT5.0) //客户端的类型,以及客户端的软件环境
Accept-Encoding:gzip,deflate //客户端支持的数据压缩格式
————————————————————————分割线————————————————————————————
username=jinqiao&password=1234 //使用POST请求时,才会存在请求体,需要传递给服务器的数据
URL: http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo?mobileCode=13301330133&userID=

五、HTTP请求返回码以及响应数据
1xx - 信息提示
2xx - 成功
3xx - 重定向
4xx - 客户端错误
5xx - 服务器错误
http请求返回码大全:http://blog.csdn.net/wangsen2235068/article/details/8081274
请求体(只有post请求才有请求体(NSData类型,所以,地址栏不可见))
userName=13301330133&userID=
【http响应】
响应头
如果状态是200表示成功,404的话则是表示为找到网页
【响应体】

六、HTTP请求的方案
1.NSURLCollection
2.NSURLSession
3.CFNetWorking
4.AFNetWorking(第三方)、YTKNetworking、ASIHttpRequest(不维护)
七、网络请求的具体使用(NSRULConnection)
什么时候用GET请求,什么时候用POST请求?二者的区别
GET
GET的语义是获取指定URL上的资源
将数据按照variable=value的形式,添加到action所指向的URL后面,并且两者使用“?”连接,各个变量之间使用“&”连接
不安全,因为在传输过程中,数据被放在请求的URL中
传输的数据量小,这主要是因为受URL长度限制
POST
POST的语意是对指定资源“追加/添加”数据
将数据放在数据体中,按照变量和值相对应的方式,传递到action所指向URL
所有数据对用户来说不可见
可以传输大量数据,上传文件只能使用Post
Http请求主要由两部分组成:http请求头、http请求体
POST请求才有请求体
请求的参数有两种形式:1.放在URL后面 (get请求)
2.放在请求体重(post请求)
a.网络请求部分
使用BLOCK完成
1.GET请求
1.NSURL
2.NSURLRequest
3.NSURLConnection
//直接发送异步请求方法
+sendAsynchronousRequest:
// 同步请求(阻塞线程)
+(NSData *)sendSynchronousRequest:
2.POST请求
1.NSURL
2.NSMutableURLRequest
需要设置 HTTPMethod,HTTPBody
muRequest.HTTPMethod = @"POST";
//如果有中文,就进行UTF8编码
muRequest.HTTPBody = [string dataUsingEncoding:NSUTF8StringEncoding];
3.NSURLConnection
//直接发送异步请求方法
+sendAsynchronousRequest:
// 同步请求(阻塞线程)
+(NSData *)sendSynchronousRequest:
使用代理完成
GET:
1.NSURL
2.NSURLRequest
3.NSURLConnection
// 设置代理,并开始(NSURLConnectionDataDelegate)
NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self];
[connection start];
POST:
需要设置 HTTPMethod,HTTPBody
muRequest.HTTPMethod = @"POST";
//如果有中文,就进行UTF8编码
muRequest.HTTPBody = [string dataUsingEncoding:NSUTF8StringEncoding];
https://www.showapi.com/api/lookPoint/341/1文本笑话接口
基于该接口,做一个页面(包含,网络请求,数据解析,数据展示)
b. 数据下载部分
下载资源路径:
@"http://7xawdc.com2.z0.glb.qiniucdn.com/o_19p6vdmi9148s16fs1ptehbm1vd59.mp4"
使用代理完成(检测下载进度)
使用代理完成
GET:
1.NSURL
2.NSURLRequest
3.NSURLConnection
// 设置代理,并开始(NSURLConnectionDataDelegate)
NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self];
[connection start];
POST:
1.NSURL
2.NSMutableURLRequest
需要设置 HTTPMethod,HTTPBody
muRequest.HTTPMethod = @"POST";
//如果有中文,就进行UTF8编码
muRequest.HTTPBody = [string dataUsingEncoding:NSUTF8StringEncoding];
3.NSURLConnection
// 设置代理,并开始(NSURLConnectionDataDelegate)
NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self];
[connection start];
协议中的方法
//服务器做出响应(response.suggestedFilename:文件名字 response.expectedContentLength)
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
//接受数据(根据数据量大小,多次响应)
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
//失败方法
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
iOS 网络基本剖析的更多相关文章
- iOS网络相关知识总结
iOS网络相关知识总结 1.关于请求NSURLRequest? 我们经常讲的GET/POST/PUT等请求是指我们要向服务器发出的NSMutableURLRequest的类型; 我们可以设置Reque ...
- iOS 网络监测
iOS网络监测,监测单个页面写在ViewController里,监测全部写在AppDelegate中,而且不用终止 - (void)viewDidLoad { [super viewDidLoad]; ...
- iOS网络基础知识
iOS网络基础知识 1.一次HTTP请求的完整过程 (1)浏览器或应用发起Http请求,请求包含Http请求Http(请求),地址(url),协议(Http1.1)请求为头部 (2)web服务器接收到 ...
- 【读书笔记】iOS网络-使用Bonjour实现自组织网络
Bonjour就是这样一种技术:设备可以通过它轻松探测并连接到相同网络中的其他设备,整个过程只需要很少的用户参与或是根本就不需要用户参与.该框架提供了众多适合于移动的使用场景,如基于网络的游戏,设备间 ...
- 【读书笔记】iOS网络-使用Game Kit实现设备间通信
Apple的Game Kit框架可以实现没有网络状况下的设备与设备之间的通信,这包括没有蜂窝服务,无法访问Wi-Fi基础设施以及无法访问局域网或Internet等情况.比如在丛林深处,高速公路上或是建 ...
- 【读书笔记】iOS网络-应用间通信
一,URL方案 URL方案有3个主要用途:根据设备上其他应用的存在与否调整逻辑,切换到其他应用以及响应打开你的应用的其他应用.你还可以通过URL方案从某个站点或是在基于Web的认证流程结束是打开应用. ...
- 【读书笔记】iOS网络-使用推送通知
一,本地通知 本地通知有64位的最大限制.虽然,你依然可以调度通知,不过到到达的通知数被限定为接近64个,并且按照fireDate的顺序排序,系统会忽略掉其余的通知.这意味着如果现在有64个调用的本地 ...
- 【读书笔记】iOS网络-测试与操纵网络流量
一,观测网络流量. 观测网络流量的行为叫做嗅探或数据包分析. 1,嗅探硬件. 从iOS模拟器捕获数据包不需要做特别的硬件或网络配置.如果需要捕获这些数据包,那么可以使用嗅探软件来监听回送设备或是用于连 ...
- 【读书笔记】iOS网络-底层网络
在iOS上,有一个库叫做Core Foundation networking或CFNetwork,它是对原始Socket的轻量级封装,不过它很快对于大多数常见场景来说变得非常笨重了.最后,添加了另一层 ...
随机推荐
- python Tesseract安装方法
python Tesseract安装方法 EXE可执行文件地址:http://download.csdn.net/download/whatday/7740469:下载tesseract-ocr-se ...
- MyBatis --- 映射关系【一对一、一对多、多对多】,懒加载机制
映射(多.一)对一的关联关系 1)若只想得到关联对象的id属性,不用关联数据表 2)若希望得到关联对象的其他属性,要关联其数据表 举例: 员工与部门的映射关系为:多对一 1.创建表 员工表 确定其外键 ...
- eclipse中springmvc框架出现404
出现404报错信息: 1.我出现的错误是配置没问题,找了一圈发现自己单词拼错了,导致运行不了,出现404 2.配置问题: jar包:首先导入spring 的jar包15个,log4j两个,junit两 ...
- Maven系列第8篇:你的maven项目构建太慢了,我实在看不下去,带你一起磨刀!!多数使用maven的人都经常想要的一种功能,但是大多数人都不知道如何使用!!!
maven系列目标:从入门开始开始掌握一个高级开发所需要的maven技能. 这是maven系列第8篇. 整个maven系列的内容前后是有依赖的,如果之前没有接触过maven,建议从第一篇看起,本文尾部 ...
- 力扣(LeetCode)买卖股票的最佳时机 个人题解
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润. 注意你不能在买入股票前卖出股票. 示例 ...
- 力扣(LeetCode)加一 个人题解
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一. 最高位数字存放在数组的首位, 数组中每个元素只存储一个数字. 你可以假设除了整数 0 之外,这个整数不会以零开头. 示例 1: 输入 ...
- 磁盘配额管理disk quotas
条件: a.确保系统内核支持,Linux一般都支持 b.确保分区格式支持,ext2都只持! c.安装有quota软件,centos默认都有! (1)检查内核是否打开磁盘配额支持 [root@cento ...
- 学习完vue指令 做的一个学生信息录入系统
一.demo实现原理 输入完个人信息后 点击创建用户 数据就会显示在下面的表格中 用到了vue中的数据双向绑定 v-model v-for 还要js正则 数组的unshift splice 等方法 ...
- PostGIS 爆管分析之找出总阀门
这个算法算是被摒弃了,但是很多自己思考过后留下的成果,虽然不用了,留着做记录. 算法目的是为了发生爆管后找到总阀门,这里分了几个步骤: 1.找到爆管点所在管段 2.通过遍历找到爆管点所有影响的阀门 3 ...
- C# 未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”
“Microsoft.Jet.OLEDB.4.0” 是数据库接口驱动,用来连接数据库的,一般多用于连Access和Excel.我在在winform开发时,在本地运行没有问题,可是部署到另一台服务器上就 ...