iOS 面試 --- 網(wǎng)絡(luò)

get 和 post的區(qū)別?

  • get:是用來(lái)獲取資源的
    安全的、冪等的、可緩存的

  • post:是用來(lái)處理資源的
    非安全的、非冪等的、不可緩存的

  • 安全的:指的是不使server 端的狀態(tài)發(fā)生變化

  • 冪等:同一個(gè)方法執(zhí)行一次和執(zhí)行多次的執(zhí)行效果一樣

  • 可緩存:請(qǐng)求是否可以被緩存

http 請(qǐng)求的整個(gè)流程?

首先是通過(guò) tcp 的三次握手建立客戶端到服務(wù)端的連接,連接建立完成,客戶端發(fā)送請(qǐng)求報(bào)文,服務(wù)端發(fā)送響應(yīng)報(bào)文給客戶端,然后通過(guò)四次揮手?jǐn)嚅_(kāi)客戶端與服務(wù)端的連接。三次握手流程是這樣的,首先是客戶端發(fā)送同步 syn 報(bào)文給服務(wù)端,服務(wù)端收到以后發(fā)送同步的 ack 報(bào)文給客戶端,客戶端將接收的 ack 報(bào)文回給服務(wù)端,此時(shí) http 連接就已經(jīng)建立了。四次揮手是,客戶端發(fā)送 fin 報(bào)文給服務(wù)端,服務(wù)端收到發(fā)送 ack 報(bào)文給客戶端,此時(shí)服務(wù)端接著發(fā)送 fin的 ack 報(bào)文給客戶端,客戶端將收到的 ack 報(bào)文回傳給服務(wù)端,這個(gè)時(shí)候客戶端和服務(wù)端就斷開(kāi)了

http有啥特點(diǎn)?

  • 無(wú)連接:實(shí)際就是 http 的持久連接方案。
  • 無(wú)狀態(tài)的:
    cookie 和 session

如何理解 http 的持久連接?

非持久連接,每次建立網(wǎng)絡(luò)請(qǐng)求都會(huì)重新建立一條連接,請(qǐng)求結(jié)束關(guān)閉連接,而http持久連接,建立一條連接,后續(xù)多個(gè)連接都在同一條 tcp 鏈路。
持久連接的頭部字段

  • Connection:keep-alive (是否是持久連接)
  • Time: (連接建立的時(shí)長(zhǎng))
  • Max: (這條連接可以發(fā)送多少條請(qǐng)求)

對(duì)于持久連接,如何判斷一個(gè)請(qǐng)求結(jié)束?

  • 請(qǐng)求報(bào)文或者響應(yīng)報(bào)文content-length,看響應(yīng)報(bào)文是否達(dá)到峰值,達(dá)到則意味著請(qǐng)求結(jié)束
  • 通過(guò)判斷 chunked,如果最后返回的那一個(gè)chunked回空,則意味著請(qǐng)求結(jié)束

https 和 http 的區(qū)別?

https 是安全的 http,它的安全來(lái)源于,在應(yīng)用層之下傳輸層之上插入了一個(gè) ssl或者 tls 來(lái)保證 http 傳輸?shù)陌踩浴?/p>

https 連接建立的流程?

  1. 客戶端向服務(wù)端發(fā)送 tls 協(xié)議的版本號(hào),以及客戶端支持的算法和一個(gè)隨機(jī)數(shù)C,之后server 端會(huì)發(fā)送一個(gè)加密算法和一個(gè)隨機(jī)數(shù)S 以及server證書(shū)給客戶端,客戶端接收到證書(shū)會(huì)進(jìn)行證書(shū)驗(yàn)證,然后會(huì)組裝會(huì)話秘鑰,此時(shí)客戶端會(huì)通過(guò)服務(wù)端的公鑰對(duì)預(yù)主秘鑰進(jìn)行加密
  2. 接著服務(wù)端通過(guò)私鑰解密得到預(yù)主秘鑰,然后組裝會(huì)話
  3. 客戶端發(fā)送加密握手消息
  4. 服務(wù)端發(fā)送加密握手消息

https采用的加密手段?

  1. 在建立連接流程使用的是非對(duì)稱加密,因?yàn)榉菍?duì)稱加密是耗時(shí)的
  2. 而在后續(xù)通信的過(guò)程中使用的是對(duì)稱加密

TCP 和 UDP

關(guān)于 TCP 和 UDP,我自認(rèn)為沒(méi)有以下這篇博文寫(xiě)的通俗易懂,故附上鏈接,大家轉(zhuǎn)到這里去看即可,所有涉及到的面試,都在這篇博文里面。
https://juejin.im/post/5e527c58e51d4526c654bf41#comment

DNS

什么是 DNS解析?

域名到ip 地址的映射,dns 解析請(qǐng)求采用 udp 數(shù)據(jù)報(bào)的形式傳輸,且明文

流程大概是什么的?

客戶端向 dns 服務(wù)器獲取連接的 ip 地址,然后用得到的 ip 地址去和服務(wù)端建立連接,這個(gè)就是 dns 解析

dns解析的方式有哪幾種?

  • 遞歸解析

  • 迭代解析


dns解析存在哪些常見(jiàn)的問(wèn)題?

  • dns劫持問(wèn)題


dns劫持和 http的關(guān)系是怎樣的?

dns 劫持和 http是沒(méi)有關(guān)系的,因?yàn)?dns 解析是發(fā)生在建立連接以前,并且 dns解析請(qǐng)求是通過(guò) udp 數(shù)據(jù)報(bào),去訪問(wèn)端口號(hào)為 53 的請(qǐng)求,所以說(shuō) dns 劫持和 http 是沒(méi)有關(guān)系的

  • dns 解析轉(zhuǎn)發(fā)

如何解決 dns 劫持?

httpDns
Dns 常規(guī)解析是使用 dns 協(xié)議向 dns 服務(wù)器的 53 端口發(fā)送請(qǐng)求,而使用 httpDns 則是使用 http 協(xié)議向 dns 服務(wù)器的 80 端口發(fā)送請(qǐng)求解析

長(zhǎng)鏈接

Cookie 和 Session

什么是 cookie?

cookie 主要是用來(lái)記錄用戶的狀態(tài)、區(qū)分用戶,狀態(tài)保存在客戶端

Cookie 生成流程

客戶端發(fā)送的 cookie 在 http 請(qǐng)求報(bào)文的Cookie頭部字段中,
服務(wù)端設(shè)置 http 響應(yīng)報(bào)文的 set-cookie頭部字段向客戶端傳遞 cookie 內(nèi)容

如何修改 cookie?

  • 新覆蓋舊
    覆蓋原則,name、domain、path需要與原來(lái)的 cookie

怎么刪除 cookie?

  • 新覆蓋舊 覆蓋原則,name、domain、path需要與原來(lái)的 cookie;* 通過(guò)設(shè)置 cookie 的 expires = 過(guò)去的一個(gè)時(shí)間點(diǎn),或者是 maxAge = 0

什么是 session?

session 主要是用來(lái)記錄用戶的狀態(tài)、區(qū)分用戶,狀態(tài)保存在Server端

session 生成流程

客戶端發(fā)送請(qǐng)求,服務(wù)端會(huì)生成 Cookie,同時(shí)會(huì)生成一個(gè) sessionId,然后已 set-Cookie 的形式返回客戶端

怎么樣保證 cookie 的安全?

  1. 對(duì) cookie 進(jìn)行加密處理
  2. 只在 https 上攜帶 cookie
  3. 設(shè)置 cookie 為 httpOnly,防止跨站腳本攻擊

總結(jié)

以上基本就涵蓋了 iOS 面試網(wǎng)絡(luò)相關(guān)的面試了

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容