likes
comments
collection
share

iOS网络相关面试题,你都学会了吗

作者站长头像
站长
· 阅读数 30

前言

不积跬步无以至千里,不积小流无以成江海。学如逆水行舟,不进则退。我是平平无奇游荡于各平台的搬运工。每天学习半小时,健康幸福一辈子。今天给大家讲的网络相关的知识点。不知道各位看官是否都会了呢。废话不多说,直接给大家上干货,希望能对你有所帮助,优秀的人已经点赞了。

一、HTTP 协议

iOS网络相关面试题,你都学会了吗

iOS网络相关面试题,你都学会了吗

iOS网络相关面试题,你都学会了吗

二、HTTP 的请求方式

GET、POST、PUT、DELETE、HEAD、OPTIONS

1、GET 和 POST 方式的区别

从语法角度来看,最直观的区别就是

  • GET 的请求参数一般以?分割拼接到 URL 后面,POST 请求参数在 Body 里面

  • GET 参数长度限制为 2048 个字符,POST 一般是没限制的

  • GET 请求由于参数裸露在 URL 中, 是不安全的,POST 请求则是相对安全

之所以说是相对安全,是因为,如果 POST 虽然参数非明文,但如果被抓包,GET 和 POST 一样都是不

安全的。(HTTPS 该用还是得用)

而从语义的角度来看:

GET:获取资源是 安全的,幂等的(只读的,纯粹的), 可缓存的

POST:获取资源是 非安全的,非幂等的,不可缓存的

  • 这里的安全是指不应引起 Server 端的任何状态变化

GET 的语义就是获取数据,是不会引起服务器的状态变化的,即是安全的。(HEAD,OPTIONS 也是安

全的)

而 POST 语义则是提交数据,是可能会引起服务器状态变化的,即是不安全的

  • 幂等:同一个请求方法执行多次和执行一次的效果完全相同

显然 GET 请求是幂等而 POST 请求是非幂等的。

这里用幂等形容 GET 还不够,因为 GET 不止是执行多次和执行一次的效果完全相同,而且是执行一次

和执行零次的效果也是完全相同的。

  • 可缓存的

请求是否可以被缓存。

GET 请求会主动进行 Cache

以上特性,并非并列,正是因为 GET 是幂等的只读的,即 GET 请求除了返回数据不会有其他副作用,所以

GET 才是安全的,从而可以直接由 CDN 缓存,大大减轻服务器的负担,也就是可缓存的。

而 POST 是非幂等的,即除了返回数据还会有其他副作用,所以 POST 是不安全的,必须交由 web 服务器处

理,即是 不可缓存的

GET和POST本质上就是TCP链接,并无差别。但是由于 HTTP 的规定和浏览器/服务器的限制,导致他们

在应用过程中体现出一些不同。

在响应时,GET 产生一个 TCP 数据包;POST 产生两个 TCP 数据包:

对于 GET 方式的请求,浏览器会把 Header 和实体主体一并发送出去,服务器响应 200(返回数据);而对于 POST,浏览器先发送 Header,服务器响应 100 Continue,浏览器再发送实体主体,服务器响应 200 OK

(返回数据)。

2、GET 相对 POST 的优势是什么?

1、最大的优势就是方便。GET 的 URL 可以直接手输,从而 GET 请求中的 URL 可以被存在书签里,或者历

史记录里

2、可以被缓存,大大减轻服务器的负担

所以大多数情况下,还是用 GET 比较好。

三、HTTP 的特点

无连接、 无状态

HTTP 的持久连接、Cookie/Session

iOS网络相关面试题,你都学会了吗

HTTP/1.0 使用非持久连接。HTTP/1.1 默认使用持久连接。非持久连接的每个连接,TCP 得在客户端和服务端分配 TCP 缓冲区,并维持 TCP 变量,会严重增加服务器负担。而且每个对象都有 2 个 RTT(Round Trip Time,也就是一个数据包从发出去到回来的时间)的延迟,由于 TCP 的拥塞控制方案,每个对象都遭受 TCP 缓启动,因为每个 TCP 连接都起始于缓启动阶段。

HTTP 持久连接怎么判断一个请求是否结束的?

  • Content-length:根据所接收字节数是否达到 Content-length 值

  • chunked(分块传输):Transfer-Encoding。当选择分块传输时,响应头中可以不包含

Content-Length,服务器会先回复一个不带数据的报文(只有响应行和响应头和\r\n),然后开始

传输若干个数据块。当传输完若干个数据块后,需要再传输一个空的数据块,当客户端收到空的数据

块时,则客户端知道数据接收完毕。

四、HTTPS、对称加密、非对称加密

1、HTTPS 和 HTTP 的区别

HTTPS 协议 = HTTP 协议 + SSL/TLS 协议

SSL 的全称是 Secure Sockets Layer,即安全套接层协议,是为网络通信提供安全及数据完整性的一种安

全协议。TLS 的全称是 Transport Layer Security,即安全传输层协议。

即 HTTPS 是安全的 HTTP。

iOS网络相关面试题,你都学会了吗

1、客户端访问HTTPS 连接

客户端会把安全协议版本号、客户端支持的加密算法列表、随机数 C 发给服务端。

2、服务端发送证书给客户端

服务端接收密钥算法配件后,会和自己支持的加密算法列表进行比对,如果不符合,则断开连接。否则,

服务端会在该算法列表中,选择一种对称算法(如 AES)、一种公钥算法(如具有特定秘钥长度的 RSA)和

一种 MAC 算法发给客户端。

服务器端有一个密钥对,即公钥和私钥,是用来进行非对称加密使用的,服务器端保存着私钥,不能将其

泄露,公钥可以发送给任何人。

在发送加密算法的同时还会把数字证书和随机数 S 发送给客户端

3、客户端验证 server 证书

会对 server 公钥进行检查,验证其合法性,如果发现发现公钥有问题,那么 HTTPS 传输就无法继续。

4、客户端组装会话秘钥

如果公钥合格,那么客户端会用服务器公钥来生成一个前主秘钥(Pre-Master Secret,PMS),并通过该前主

秘钥和随机数 C、S 来组装成会话秘钥

5、客户端将前主秘钥加密发送给服务端

是通过服务端的公钥来对前主秘钥进行非对称加密,发送给服务端

6、服务端通过私钥解密得到前主秘钥

服务端接收到加密信息后,用私钥解密得到主秘钥。

7、服务端组装会话秘钥

服务端通过前主秘钥和随机数 C、S 来组装会话秘钥。

至此,服务端和客户端都已经知道了用于此次会话的主秘钥。

8、数据传输

客户端收到服务器发送来的密文,用客户端密钥对其进行对称解密,得到服务器发送的数据。

同理,服务端收到客户端发送来的密文,用服务端密钥对其进行对称解密,得到客户端发送的数据。

总结:

会话秘钥 = random S + random C + 前主秘钥

  • HTTPS 连接建立过程使用非对称加密,而非对称加密是很耗时的一种加密方式

  • 后续通信过程使用对称加密,减少耗时所带来的性能损耗

  • 其中,对称加密加密的是实际的数据,非对称加密加密的是对称加密所需要的客户端的密钥。

五、对称加密和非对称加密

1、对称加密

用同一套密钥来进行加密解密。

对称加密通常有 DES,IDEA,3DES 加密算法。

2、非对称加密

用公钥和私钥来加解密的算法。

公钥(Public Key)与私钥(Private Key)是通过一种算法得到的一个密钥对(即一个公钥和一个私钥),

公钥是密钥对中公开的部分,私钥则是非公开的部分,私钥通常是保存在本地。

  • 用公钥进行加密,就要用私钥进行解密;反之,用私钥加密,就要用公钥进行解密(数字签名)。

  • 由于私钥是保存在本地的,所以非对称加密相对与对称加密是安全的。 但非对称加密比对称加密耗时(100 倍以上),所以通常要结合对称加密来使用。

常见的非对称加密算法有:RSA、ECC(移动设备用)、Diffie-Hellman、El Gamal、DSA(数字签名用)

而为了确保客户端能够确认公钥就是想要访问的网站的公钥,引入了数字证书的概念,由于证书存在一级

一级的签发过程,所以就出现了证书链,在证书链中的顶端的就是根 CA。

六、TCP 的特点和报文结构

1、面向连接、可靠传输、面向字节流、全双工服务

2、TCP 的报文结构 TCP 报文段由首部字段和一个数据字段组成。

数据字段包含一块应用数据。最大报文长度 MSS(Maximum Segment Size)限制了报文段数据字段的最大

长度。MSS 选项用于在 TCP 连接建立时,收发双方协商通信时每一个报文段所能承载的最大数据长度。

所以当 TCP 发送一个大文件(比如一张高清图片)时,通常是将该文件划分为 MSS 长度的若干块(最后一

块除外,通常会小于 MSS)。而实际交互式应用通常传送长度小于 MSS 的数据块。

iOS网络相关面试题,你都学会了吗

iOS网络相关面试题,你都学会了吗

总结

学习这件事情,我们不能急功近利,一次性吃成一个胖子,而是在于不断学习,可持续性学习。日积月累,水滴石穿。作为游荡于各个平台的搬运工,我也收集了许多iOS开发资料,面试资料。如果你正好需要,我正好有这个渠道。需要的话课点击下面的圈子。最后求一波点赞和关注。

圈子

转载自:https://juejin.cn/post/7004739022123696136
评论
请登录