美文网首页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