一、网络通信的本质

数据传输,数据交换

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 网络基本剖析的更多相关文章

  1. iOS网络相关知识总结

    iOS网络相关知识总结 1.关于请求NSURLRequest? 我们经常讲的GET/POST/PUT等请求是指我们要向服务器发出的NSMutableURLRequest的类型; 我们可以设置Reque ...

  2. iOS 网络监测

    iOS网络监测,监测单个页面写在ViewController里,监测全部写在AppDelegate中,而且不用终止 - (void)viewDidLoad { [super viewDidLoad]; ...

  3. iOS网络基础知识

    iOS网络基础知识 1.一次HTTP请求的完整过程 (1)浏览器或应用发起Http请求,请求包含Http请求Http(请求),地址(url),协议(Http1.1)请求为头部 (2)web服务器接收到 ...

  4. 【读书笔记】iOS网络-使用Bonjour实现自组织网络

    Bonjour就是这样一种技术:设备可以通过它轻松探测并连接到相同网络中的其他设备,整个过程只需要很少的用户参与或是根本就不需要用户参与.该框架提供了众多适合于移动的使用场景,如基于网络的游戏,设备间 ...

  5. 【读书笔记】iOS网络-使用Game Kit实现设备间通信

    Apple的Game Kit框架可以实现没有网络状况下的设备与设备之间的通信,这包括没有蜂窝服务,无法访问Wi-Fi基础设施以及无法访问局域网或Internet等情况.比如在丛林深处,高速公路上或是建 ...

  6. 【读书笔记】iOS网络-应用间通信

    一,URL方案 URL方案有3个主要用途:根据设备上其他应用的存在与否调整逻辑,切换到其他应用以及响应打开你的应用的其他应用.你还可以通过URL方案从某个站点或是在基于Web的认证流程结束是打开应用. ...

  7. 【读书笔记】iOS网络-使用推送通知

    一,本地通知 本地通知有64位的最大限制.虽然,你依然可以调度通知,不过到到达的通知数被限定为接近64个,并且按照fireDate的顺序排序,系统会忽略掉其余的通知.这意味着如果现在有64个调用的本地 ...

  8. 【读书笔记】iOS网络-测试与操纵网络流量

    一,观测网络流量. 观测网络流量的行为叫做嗅探或数据包分析. 1,嗅探硬件. 从iOS模拟器捕获数据包不需要做特别的硬件或网络配置.如果需要捕获这些数据包,那么可以使用嗅探软件来监听回送设备或是用于连 ...

  9. 【读书笔记】iOS网络-底层网络

    在iOS上,有一个库叫做Core Foundation networking或CFNetwork,它是对原始Socket的轻量级封装,不过它很快对于大多数常见场景来说变得非常笨重了.最后,添加了另一层 ...

随机推荐

  1. 中文企业云操作系统 CecOS

    CecOS介绍 CecOS(原中文企业云操作系统.第一个版本基于oVirt 3.0,后续在此基础上不断升级迭代拓展至今,已形成基于基础底层和应用功能拓展集成在内的10款产品和四大平台),旨在通过先进的 ...

  2. markdown 编辑器概述

    markdown 编辑器概述     编辑器其实很多很多,主要分为    网页编辑和软件编辑 (效果其实感觉效果差不多,看个人喜好,笔者个人还是喜欢本地,感觉方便挺多的) ## 网页编辑器 主要有 C ...

  3. 如何学习python,个人的一些简单见解

    什么是重要的东西 思考学习是一个什么样的过程 我们每个人都学习过数学,肯定都知道数学的学习过程是什么,我们刚开始学习数学的时候会学习一些简单的公式和概念,比如加减乘除,随着学习的深入,我们发现在大学之 ...

  4. 在小程序中使用md5

    使用md5.js的首先你要有md5.js这个文件https://github.com/emn178/js-md5 您也可以使用Bower安装js-md5. bower install md5 对于no ...

  5. C#winfrom打开指定的文件

    直接打开指定的文件 System.Diagnostics.Process.Start(v_OpenFilePath); 直接打开目录 string v_OpenFolderPath = @" ...

  6. thefuck的安装和使用

    先上一张图片  当输错linux命令,fuck一下….. 安装步骤: sudo apt-get install python3-dev python3-pip sudo -H pip3 install ...

  7. ffmpeg 编译安装

    1.FFmpeg编译 1.1.安装yasm 这里我是直接通过ubuntu包安装的,当然也可以通过编译源码来安装. sudo apt-get install yasm 1.2.下载FFmpeg git ...

  8. Appium+python自动化(四十二)-Appium自动化测试框架综合实践- 寿终正寝完结篇(超详解)

    1.简介 按照上一篇的计划,今天给小伙伴们分享执行测试用例,生成测试报告,以及自动化平台.今天这篇分享讲解完.Appium自动化测试框架就要告一段落了. 2.执行测试用例&报告生成 测试报告, ...

  9. linux目录数

    FHS Filesystem Hierarchy Standard(文件系统层次化标准,[ˈhaɪərɑ:rki] 等级制度)的缩写,多数Linux版本采用这种文件组织形式,类似于Windows操作系 ...

  10. php使用cUrl方法 get、post请求

    php使用curl方法,请确保已经开启curl扩展.传送门:http://www.cnblogs.com/wgq123/p/7450667.html /**Curl请求get方法 *@$url Str ...