一般,HTTP的请求方式有3种,分别是:POST、GET、HEAD。POST和GET方法是用于数据发送的。html
POST:它将要发送的数据单独放在一个流中进行发送,而不是附加在URL地址后面,这样作的好处是这些数据不会出如今URL地址中。程序员
GET:它将要发送的数据直接添加在URL后面,如:www.sina.com.cn?username=""&password="",这样的好处是能够直接将数据加在URL后,而不需在用另外的流来发送这些数据,可是缺点也显而易见,它将用户的信息显示出来了。web
HEAD:它是请求资源的元数据方法。在具体的应用中,我暂时还没遇到过,也不去对它进行研究,须要是在学习。面试
URL全称是资源描述符,咱们能够这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操做。编程
GET通常用于获取/查询资源信息,而POST通常用于更新资源信息。json
它是基于TCP/IP协议,Socket就是一个能够连通网络上不一样计算机程序之间的管道,把一堆数据从管道的A端扔进去,则会从管道的B端(也许同时还能够从C、D、E、F……端冒出来)。管道的端口由两个因素来惟一确认,即机器的IP地址和程序所使用的端口号。数组
Socket能够支持数据的发送和接收,它会定义一种称为套接字的变量,发送数据时首先建立套接字,而后使用该套接字的sendto等方法对准某个IP/端口进行数据发送;接收端也首先建立套接字,而后将该套接字绑定到一个IP/端口上,全部发向此端口的数据会被该套接字的recv等函数读出。如同读出文件中的数据同样。浏览器
TCP/IP的socket提供下列三种类型套接字。 流式套接字、数据报式套接字、原始式套接字。安全
客户端编程步骤:服务器
1:加载套接字库,建立套接字(WSAStartup()/socket());
2:向服务器发出链接请求(connect());
3:和服务器端进行通讯(send()/recv());
4:关闭套接字,关闭加载的套接字库(closesocket()/WSACleanup())。
经常使用第三方库:1,Asyncsocket库
asihttp代码原理,异步请求的原理,异步请求最大数目,为何只能这么多?
ASIHTTPRequest是一个简易使用的类库,经过包装CFNetwork API 来简化 和服务器端的通信. 它编写的语言是Objective-C 可以应用于Mac OS X and iPhone 平台的应用程序.
异步: 请求经过事件触发->服务器处理(这是浏览器仍然能够做其余事情)->处理完毕这个数量是跟cpu有关的,并发性取决于cpu核数,每一个核只能同时处理一个任务.4核cpu理论上能够并发处理4个任务,若是按http来算就是4个请求,可是cpu是抢占式资源,因此通常来讲并发量是要根据任务的耗时和cpu的繁忙度来计算4个左右只是个经验值你开10个短耗时的任务和几个长耗时任务的效率是不一样的。
JSONKit、SBJson、TouchJSON(性能从左到右,越右越差,主要就是性能上的差异)
1> 设置请求超时
2> 给用户提示请求超时
3> 根据用户操做再次请求数据
请求头:包含了对客户端的环境描述、客户端请求的主机地址等信息
OC中响应用NSURLRespose:返回给客户端的回应包含:
实体内容:服务器返回给客户端的具体二进制数据
经常使用属性: expectedContentLength (下载时返回文件的长度)
suggestedFilename(建议保存的文件名)
GET | POST | |
---|---|---|
用途 | 从服务器上获取数据 | 向服务器传送数据提交方式 |
服务器解析 | Request.QueryString获取变量的值 | Request.Form获取提交的数据 |
数据大小 | 最大1024字节 | 无限制 |
安全性 | URL中能看到提交的数据 | 隐藏在请求头中 |
TCP | UDP | |
---|---|---|
发送与接收 | 安全送达 | 只管发送 |
创建链接 | 是(三次握手) | 否(有数据包,无需链接) |
数据大小 | 无限制 | 每一个数据报64k |
可靠性 | 可靠 | 不可靠 |
速度 | 慢(三次握手才能完成链接 | 快(无需链接) |
应用 | 流媒体 |
三次握手实现的过程:
四次挥手:
Json与xml的区别:
JSON底层原理:
XML底层原理:
OSI简介:OSI采用了分层的结构化技术,共分七层,物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
物理层:主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各类传输介质的传输速率等。它的主要做用是传输比特流(就是由一、0转化为电流强弱来进行传输,到达目的地后在转化为一、0,也就是咱们常说的数模转换与模数转换)。这一层的数据叫作比特。
数据链路层:定义了如何让格式化数据以进行传输,以及如何让控制对物理介质的访问。这一层一般还提供错误检测和纠正,以确保数据的可靠传输。
网络层::在位于不一样地理位置的网络中的两个主机系统之间提供链接和路径选择。Internet的发展使得从世界各站点访问信息的用户数大大增长,而网络层正是管理这种链接的层。
传输层:定义了一些传输数据的协议和端口号(WWW端口80等),如:TCP(传输控制协议,传输效率低,可靠性强,用于传输可靠性要求高,数据量大的数据),UDP(用户数据报协议,与TCP特性偏偏相反,用于传输可靠性要求不高,数据量小的数据,如QQ聊天数据就是经过这种方式传输的)。 主要是将从下层接收的数据进行分段和传输,到达目的地址后再进行重组。经常把这一层数据叫作段。
会话层:经过传输层(端口号:传输端口与接收端口)创建数据传输的通路。主要在你的系统之间发起会话或者接受会话请求(设备之间须要互相认识能够是IP也能够是MAC或者是主机名)
表示层::可确保一个系统的应用层所发送的信息能够被另外一个系统的应用层读取。例如,PC程序与另外一台计算机进行通讯,其中一台计算机使用扩展二一十进制交换码(EBCDIC),而另外一台则使用美国信息交换标准码(ASCII)来表示相同的字符。若有必要,表示层会经过使用一种通格式来实现多种数据格式之间的转换。
应用层:是最靠近用户的OSI层。这一层为用户的应用程序(例如电子邮件、文件传输和终端仿真)提供网络服务。
all people seem to need date processing这一句话的意思是全部的人彷佛都须要处理数据
Application | all |
Presentation | people |
Session | seem |
Transport | to |
Network | need |
Data | date |
Physical | processing |
NSURLSession
支持断点下载,自动记录中止下载时断点的位置
下载步骤:
设置下载任务task的为成员变量
@property (nonatomic, strong) NSURLSessionDownloadTask *task;
获取NSURLSession对象
NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[[NSOperationQueue alloc] init]];
初始化下载任务任务
self.task = [session downloadTaskWithURL:(此处为下载文件路径URL)];
实现代理方法
/*每当写入数据到临时文件的时候,就会调用一次该方法,一般在该方法中获取下载进度/
-(void)URLSession:(NSURLSession )session downloadTask: (NSURLSessionDownloadTask )downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite
{
// 计算下载进度 CGFloat progress = 1.0 * totalBytesWritten / totalBytesExpectedToWrite;
}
/*任务终止时调用的方法,一般用于断点下载/
-(void)URLSession:(NSURLSession )session downloadTask:(NSURLSessionDownloadTask )downloadTask didResumeAtOffset:(int64_t)fileOffset expectedTotalBytes:(int64_t)expectedTotalBytes
{
//fileOffset:下载任务停止时的偏移量
}
/*遇到错误的时候调用,error参数只能传递客户端的错误/
-(void)URLSession:(NSURLSession )session task:(NSURLSessionTask )task didCompleteWithError:(NSError *)error
{ }
/*下载完成的时候调用,须要将文件剪切到能够长期保存的文件夹中/
-(void)URLSession:(NSURLSession )session downloadTask:(NSURLSessionDownloadTask )downloadTask didFinishDownloadingToURL:(NSURL *)location
{
//生成文件长期保存的路径 NSString *file = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:downloadTask.response.suggestedFilename]; //获取文件句柄 NSFileManager *fileManager = [NSFileManager defaultManager]; //经过文件句柄,将文件剪切到文件长期保存的路径 [fileManager moveItemAtURL:location toURL:[NSURL fileURLWithPath:file] error:nil];
}
操做任务状态
/*开始/继续下载任务/
[self.task resume];
/*暂停下载任务/
[self.task suspend];
HTTP协议的特色:
- HTTP超文本传输协议,是短链接,是客户端主动发送请求,服务器作出响应,服务器响应以后,连接断开。HTTP是一个属于应用层面向对象的协议,HTTP有两类报文:请求报文和响应报文。 - HTTP请求报文:一个HTTP请求报文由请求行、请求头部、空行和请求数据4部分组成。 - HTTP响应报文:由三部分组成:状态行、消息报头、响应正文。
A UDP
B TCP
C HTTP D FTP 参考答案:D 理由:FTP是文件传输协议,是File Transfer Protocol的简称,它的做用是用于控制互联网上文件的双向传输,所以必定不会是即时聊天使用的;UDP是面向无链接的传输层协议,数据传输是不可靠的,它只管发,无论收不收获得;TCP是面向链接的,可靠的传输层协议;HTTP是超文本传输协议,对应于应用层,而HTTP是基于TCP的。
在iOS中,一般是用UIWebView来实现,固然在iOS8之后可使用WKWebView来实现.有如下几种实现方法: 经过实现UIWebView的代理方法来拦截,判断scheme是不是约定好的,而后iOS调用本地相关API来实现: - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType; 在iOS7之后,能够直接经过JavaScripteCore这个库来实现,经过往JS DOM注入对象,而这个对象对应于咱们iOS的某个类的实例。更详细请阅读: OC JavaScriptCore与js交互 WKWebView新特性及JS交互 Swift JavaScriptCore与JS交互 能够经过WebViewJavascriptBridge来实现。具体如何使用,请你们去其它博客搜索吧! 优缺点: iOS加入H5响应比原生要慢不少,体验不太好,这是缺点。 iOS加入H5能够实现嵌入别的功能入口,可随时更改,不用更新版本就能够上线,这是最大的优势。
XMPP(Extensible Messaging and Presence Protocol,前称)是一种以XML为基础的开放式实时通讯协议,是 经由互联网工程工做小组(IETF)经过的互联网标准。简单的说,XMPP就是一种协议,一种规定。就是说,在网络上传 东西,要创建链接,TCP/IP链接,创建后再传东西,而XMPP就是规定你传的东西的格式。XMPP是基于XML的协议。 优势 开放: XMPP协议是自由、开放、公开的,而且易于了解。 并且在客户端 、 服务器 、 组件 、 源码库等方面,都已经各自有多种实现。 标准: 互联网工程工做小组( IETF )已经将Jabber的核心XML流协议以XMPP之名,正式列为承认的实时通讯及Presence技术。 而XMPP的技术规格已被定义在RFC 3920及RFC 3921 。 任何IM供应商在遵循XMPP协议下,均可与Google Talk实现链接。 证明可用: 第一个Jabber(如今XMPP)技术是Jeremie Miller在1998年开发的,如今已经至关稳定;数以百计的开发者为XMPP技术而努 力。 今日的互联网上有数以万计的XMPP服务器运做着,并有数以百万计的人们使用XMPP实时传讯软件。 分散式: XMPP网络的架构和电子邮件十分相像;XMPP核心协议通讯方式是先建立一个stream,XMPP以TCP传递XML数据流,没有 中央主服务器。 任何人均可以运行本身的XMPP服务器,使我的及组织可以掌控他们的实时传讯体验。 安全: 任何XMPP协议的服务器能够独立于公众XMPP网络(例如在企业内部网络中),而使用SASL及TLS等技术的可靠安全性,已自 带于核心XMPP技术规格中。 可扩展: XML 命名空间的威力可以使任何人在核心协议的基础上建造定制化的功能;为了维持通透性,常见的扩展由XMPP标准基金会 。 弹性佳: XMPP除了可用在实时通讯的应用程序,还能用在网络管理、内容供稿、协同工具、文件共享、游戏、远程系统监控等。 多样性: 用XMPP协议来建造及布署实时应用程序及服务的公司及开放源代码计划分布在各类领域;用XMPP技术开发软件,资源及支持的 来源是多样的,使得使你不会陷于被“绑架”的困境。 缺点 数据负载过重: 随着一般超过70%的XMPP协议的服务器的数据流量的存在和近60%的被重复转发,XMPP协议目前拥有一个大型架空中存在的 数据提供给多个收件人。 新的议定书正在研究,以减轻这一问题。 没有二进制数据: XMPP协议的方式被编码为一个单一的长的XML文件,所以没法提供修改二进制数据。 所以, 文件传输协议同样使用外部的 HTTP。 若是不可避免,XMPP协议还提供了带编码的文件传输的全部数据使用的Base64 。 至于其余二进制数据加密会话 (encrypted conversations)或图形图标(graphic icons)以嵌入式使用相同的方法。
利用字典(图片地址为key,下载操做为value)
1> SIP(Session Initiation Protocol),会话发起协议 2> SIP是创建VOIP链接的 IETF 标准,IETF是全球互联网最具权威的技术标准化组织 3> 所谓VOIP,就是网络电话,直接用互联网打电话,不用耗手机话费
TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。TCP/IP协议簇分为四层,IP位于协议簇的第二层(对应OSI的第三层),TCP位于协议簇的第三层(对应OSI的第四层)。
应用层:应用程序间沟通的层,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。
传输层:在此层中,它提供了节点间的数据传送服务,如传输控制协议(TCP)、用户数据报协议(UDP)等,TCP和UDP给数据包加入传输数据并把它传输到下一层中,这一层负责传送数据,而且肯定数据已被送达并接收。
互连网络层:负责提供基本的数据封包传送功能,让每一块数据包都可以到达目的主机(但不检查是否被正确接收),如网际协议(IP)。
网络接口层:对实际的网络媒体的管理,定义如何使用实际网络(如Ethernet、Serial Line等)来传送数据。
文章若有问题,请留言,我将及时更正。