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 連接建立的流程?
- 客戶端向服務(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)行加密
- 接著服務(wù)端通過(guò)私鑰解密得到預(yù)主秘鑰,然后組裝會(huì)話
- 客戶端發(fā)送加密握手消息
- 服務(wù)端發(fā)送加密握手消息
https采用的加密手段?
- 在建立連接流程使用的是非對(duì)稱加密,因?yàn)榉菍?duì)稱加密是耗時(shí)的
- 而在后續(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 的安全?
- 對(duì) cookie 進(jìn)行加密處理
- 只在 https 上攜帶 cookie
- 設(shè)置 cookie 為 httpOnly,防止跨站腳本攻擊
總結(jié)
以上基本就涵蓋了 iOS 面試網(wǎng)絡(luò)相關(guān)的面試了



