美文网首页iOS基本功
iOS 面试 --- 网络

iOS 面试 --- 网络

作者: 唐师兄 | 来源:发表于2020-03-16 16:43 被阅读0次

get 和 post的区别?

  • get:是用来获取资源的
    安全的、幂等的、可缓存的

  • post:是用来处理资源的
    非安全的、非幂等的、不可缓存的

  • 安全的:指的是不使server 端的状态发生变化

  • 幂等:同一个方法执行一次和执行多次的执行效果一样

  • 可缓存:请求是否可以被缓存

http 请求的整个流程?

首先是通过 tcp 的三次握手建立客户端到服务端的连接,连接建立完成,客户端发送请求报文,服务端发送响应报文给客户端,然后通过四次挥手断开客户端与服务端的连接。三次握手流程是这样的,首先是客户端发送同步 syn 报文给服务端,服务端收到以后发送同步的 ack 报文给客户端,客户端将接收的 ack 报文回给服务端,此时 http 连接就已经建立了。四次挥手是,客户端发送 fin 报文给服务端,服务端收到发送 ack 报文给客户端,此时服务端接着发送 fin的 ack 报文给客户端,客户端将收到的 ack 报文回传给服务端,这个时候客户端和服务端就断开了

http有啥特点?

  • 无连接:实际就是 http 的持久连接方案。
  • 无状态的:
    cookie 和 session

如何理解 http 的持久连接?

非持久连接,每次建立网络请求都会重新建立一条连接,请求结束关闭连接,而http持久连接,建立一条连接,后续多个连接都在同一条 tcp 链路。
持久连接的头部字段

  • Connection:keep-alive (是否是持久连接)
  • Time: (连接建立的时长)
  • Max: (这条连接可以发送多少条请求)

对于持久连接,如何判断一个请求结束?

  • 请求报文或者响应报文content-length,看响应报文是否达到峰值,达到则意味着请求结束
  • 通过判断 chunked,如果最后返回的那一个chunked回空,则意味着请求结束

https 和 http 的区别?

https 是安全的 http,它的安全来源于,在应用层之下传输层之上插入了一个 ssl或者 tls 来保证 http 传输的安全性。

https 连接建立的流程?

  1. 客户端向服务端发送 tls 协议的版本号,以及客户端支持的算法和一个随机数C,之后server 端会发送一个加密算法和一个随机数S 以及server证书给客户端,客户端接收到证书会进行证书验证,然后会组装会话秘钥,此时客户端会通过服务端的公钥对预主秘钥进行加密
  2. 接着服务端通过私钥解密得到预主秘钥,然后组装会话
  3. 客户端发送加密握手消息
  4. 服务端发送加密握手消息

https采用的加密手段?

  1. 在建立连接流程使用的是非对称加密,因为非对称加密是耗时的
  2. 而在后续通信的过程中使用的是对称加密

TCP 和 UDP

关于 TCP 和 UDP,我自认为没有以下这篇博文写的通俗易懂,故附上链接,大家转到这里去看即可,所有涉及到的面试,都在这篇博文里面。
https://juejin.im/post/5e527c58e51d4526c654bf41#comment

DNS

什么是 DNS解析?

域名到ip 地址的映射,dns 解析请求采用 udp 数据报的形式传输,且明文

流程大概是什么的?

客户端向 dns 服务器获取连接的 ip 地址,然后用得到的 ip 地址去和服务端建立连接,这个就是 dns 解析

dns解析的方式有哪几种?

  • 递归解析

  • 迭代解析


dns解析存在哪些常见的问题?

  • dns劫持问题


dns劫持和 http的关系是怎样的?

dns 劫持和 http是没有关系的,因为 dns 解析是发生在建立连接以前,并且 dns解析请求是通过 udp 数据报,去访问端口号为 53 的请求,所以说 dns 劫持和 http 是没有关系的

  • dns 解析转发

如何解决 dns 劫持?

httpDns
Dns 常规解析是使用 dns 协议向 dns 服务器的 53 端口发送请求,而使用 httpDns 则是使用 http 协议向 dns 服务器的 80 端口发送请求解析

长链接

Cookie 和 Session

什么是 cookie?

cookie 主要是用来记录用户的状态、区分用户,状态保存在客户端

Cookie 生成流程

客户端发送的 cookie 在 http 请求报文的Cookie头部字段中,
服务端设置 http 响应报文的 set-cookie头部字段向客户端传递 cookie 内容

如何修改 cookie?

  • 新覆盖旧
    覆盖原则,name、domain、path需要与原来的 cookie

怎么删除 cookie?

  • 新覆盖旧 覆盖原则,name、domain、path需要与原来的 cookie;* 通过设置 cookie 的 expires = 过去的一个时间点,或者是 maxAge = 0

什么是 session?

session 主要是用来记录用户的状态、区分用户,状态保存在Server端

session 生成流程

客户端发送请求,服务端会生成 Cookie,同时会生成一个 sessionId,然后已 set-Cookie 的形式返回客户端

怎么样保证 cookie 的安全?

  1. 对 cookie 进行加密处理
  2. 只在 https 上携带 cookie
  3. 设置 cookie 为 httpOnly,防止跨站脚本攻击

总结

以上基本就涵盖了 iOS 面试网络相关的面试了

相关文章

网友评论

    本文标题:iOS 面试 --- 网络

    本文链接:https://www.haomeiwen.com/subject/hixudhtx.html