iOS面试题-网络篇
网络请求状态码
1xx(临时响应)
表示临时响应并需要请求者继续执行操作的状态码。
100(继续)请求者应当继续提出请求。服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。
101(切换协议)请求者已要求服务器切换协议,服务器已确认并准备切换。
2xx(成功)
表示成功处理了请求的状态代码。
200(成功)服务器已成功处理了请求。通常,这表示服务器提供了请求的网页。
201(已创建)请求成功并且服务器创建了新的资源。
202(已接受)服务器已接受请求,但尚未处理。
203(非授权信息)服务器已成功处理了请求,但返回的信息可能来自另一来源。
204(无内容)服务器成功处理了请求,但没有返回任何内容。
205(重置内容)服务器成功处理了请求,但没有返回任何内容。
206(部分内容)服务器成功处理了部分GET请求。
3xx(重定向)
表示要完成请求,需要进一步操作。
300(多种选择)针对请求,服务器可执行多种操作。服务器可根据请求者选择一项操作,或提供操作列表供请求者选择。
301(永久移动)请求的网页已永久移动到新位置。服务器返回此响应(对GET或HEAD请求的响应)时,会自动将请求者转到新位置。
302(临时移动)服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
303(查看其他位置)请求者应当对不同的位置使用单独的GET请求来检索响应时,服务器返回此代码。
304(未修改)自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容。
305(使用代理)请求者只能使用代理访问请求的网页。如果服务器返回此响应,还表示请求者应使用代理。
307(临时重定向)服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
4xx(请求错误)
这些状态码表示请求可能出错,妨碍了服务器的处理。
400(错误请求)服务器不理解请求的语法。
401(未授权)请求要求身份验证。对于需要登录的网页,服务器可能返回此响应。
403(禁止)服务器拒绝请求。
404(未找到)服务器找不到请求的网页。
405(方法禁用)禁用请求中指定的方法。
406(不接受)无法使用请求的内容特性响应请求的网页。
407(需要代理授权)此状态代码与401(未授权)类似,但制定请求者应当授权使用代理。
408(请求超时)服务器等候请求时发生超时。
409(冲突)服务器在完成请求时发生冲突。服务器必须在响应中包含有关冲突的信息。
410(已删除)如果请求的资源已永久删除,服务器就会返回此响应。
411(需要有效长度)服务器不接受不含有效内容长度标头字段的请求。
412(未满足前提条件)服务器未满足请求者在请求中设置的其中一个前提条件。
413(请求实体过大)服务器无法处理请求,因为请求实体过大,超出服务器的处理能力。
414(请求的URL过长)请求的URL过长,服务器无法处理。
415(不支持的媒体类型)请求的格式不受请求页面的支持。
416(请求范围不符合要求)如果页面无法提供请求的范围,则服务器会返回此状态码。
417(未满足期望值)服务器未满足“期望”请求标头字段的要求。
5xx(服务器错误)
这些状态码表示服务器在尝试处理请求时发生内部错误。这些错误可能是服务器本身的错误,而不是请求出错。
500(服务器内部错误)服务器遇到错误,无法完成请求。
501(尚未实施)服务器不具备完成请求的功能。例如,服务器无法识别请求方法时可能会返回此代码。
502(错误网关)服务器作为网关或代理,从上游服务器收到无效响应。
503(服务不可用)服务器目前无法使用(由于超载或停机维护)。通常这只是暂时状态。
504(网关超时)服务器作为网关或代理,但是没有及时从上游服务器收到请求。
505(HTTP版本不受支持)服务器不支持请求中所用的HTTP协议版本。
HTTP请求方法
GET:请求指定的页面信息,并返回实体主体。
HEAD:类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头。
POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立或已有资源的修改。
PUT:从客户端向服务器传送的数据取代指定的文档的内容。
DELETE:请求服务器删除指定的页面。
CONNECT:HTTP1.1协议中预留给能够将连接改为管道方式的代理服务器。
OPTIONS:允许客户端查看服务器的性能。
TRACE:回显服务器收到的请求,主要用于测试或诊断。
HTTP协议的特点
HTTP超文本传输协议,是短链接,是客户端主动发送请求,服务器做出响应,服务器响应之后,链接断开。HTTP是一个属于应用层面向对象的协议,HTTP有两类报文:请求报文和响应报文。
HTTP请求报文:一个HTTP请求报文由请求行、请求头、空行和请求数据4部分组成。
HTTP响应报文:由三部分组成:状态行、消息报头、响应正文。
HTTP的POST与GET区别与联系?
用途:GET从服务器上获取数据,POST向服务器传送数据提交方式
服务器解析:GET通过Request.QueryString获取变量的值,POST通过Request.Form获取提交的数据
数据大小:GET最大1024字节,POST无限制
安全性:URL中能看到提交的数据,POST隐藏在请求头中
TCP和UDP的区别
UDP:是用户数据报协议,主要用在实时性要求高以及对质量相对较弱的地方,但面对现在高质量的线路不是容易丢包除非是一些拥塞条件下,如流媒体
TCP:是传输控制协议,是面连接的,那么运行环境必然要求其可靠性不可丢包,有良好的拥塞控制机制
发送与接收:TCP安全送达,UDP只管发送
建立连接:TCP建立连接(三次握手),UDP有数据包无需连接
数据大小:TCP无限制,UDP每个数据包64k
可靠性:TCP可靠,UDP不可靠
速度:TCP速度慢(三次握手才能完成连接),UDP速度快
应用:TCP-流媒体,UDP-qq
什么是三次握手与四次挥手
三次握手实现的过程:
第一次握手:建立连接时,客户端发送同步序列编号到服务器,并进入发送状态,等待服务器确认
第二次握手:服务器收到同步序列编号,确认并同时自己也发送一个同步序列编号+确认标志,此时服务器进入接收状态
第三次握手:客户端收到服务器发送的包,并向服务器发送确认标志,随后链接成功。
四次挥手:
第一次:客户端向服务器发送一个带有结束标记的报文
第二次:服务器收到报文后,向客户端发送一个确认序号,同时通知自己相应的应用程序,对方要求关闭连接
第三次:服务器向客户端发送一个带有结束标记的报文
第四次:客户端收到报文后,向服务器发送一个确认序号,链接关闭。
ASIHTTTP代码原理,异步请求的原理,异步请求最大数目,为什么只能这么多?
ASIHTTPRequest是一个简易使用的类库,通过包装CFNetwork API来简化和服务器端端通讯。它编写的语言是Objective-C能够应用于Mac OS X and iPhone平台的应用程序。
异步:请求通过事件触发->服务器处理(这时浏览器仍然可以作其他事情)->处理完毕。这个数量是跟cpu有关的,并发性取决于cpu核数,每个核只能同时处理一个任务,4核cpu理论上可以并发处理4个任务,如果按http来算就是4个请求,但是cpu是抢占式资源,所以一般来说并发量是要根据任务的耗时和cpu的繁忙度来计算。
Socket编程简述
它是基于TCP/IP协议,Socket就是一个可以连通网络上不同计算机程序之间的管道,把一堆数据从管道的A端扔进去,则会从管道的B端(也许同时还可以从C、D、E、F……端冒出来)。管道的端口由两个因素来唯一确认,即机器的IP地址和程序所使用的端口号。
Socket可以支持数据的发送和接收,它会定义一种称为套接字的变量,发送数据时首先创建套接字,然后使用套接字的sendto等方法对准某个IP/端口进行数据发送;接收端也首先创建套接字,然后将该套接字绑定到一个IP/端口上,所有发向此端口的数据会被该套接字的recv等函数读出。如同读出文件中的数据一样。
TCP/IP的socket提供下列三种类型套接字。流式套接字、数据报式套接字、原始式套接字。
客户端编程步骤:
1.加载套接字库,创建套接字;
2.向服务器发出连接请求;
3.和服务器端进行通信;
4.关闭套接字,关闭加载的套接字库
APP需要加载超大量的数据,给服务器发送请求,但是服务器卡住了如何解决?
1.设置请求超时
2.给用户提示请求超时
3.根据用户操作再次请求数据