最近部門組織了一次前端性能優(yōu)化交流會(huì)淮悼,大家從輸入頁面 URL 到最終頁面展示內(nèi)容這個(gè)過程提出了許多優(yōu)化點(diǎn)。但同時(shí)發(fā)現(xiàn)很多同學(xué)對(duì) HTTP 協(xié)議層的知識(shí)不能串聯(lián)起來揽思,于是整理了這篇文章袜腥,希望可以給大家?guī)硪唤z靈感。
當(dāng)我們?cè)陧撁嫔习l(fā)起一個(gè) AJAX 請(qǐng)求的時(shí)候钉汗,在網(wǎng)絡(luò)協(xié)議層面都經(jīng)歷了哪些內(nèi)容羹令?
// 發(fā)起請(qǐng)求
fetch('https://baidu.com')
// 協(xié)議層1...
// 協(xié)議層2...
// 協(xié)議層3...
.then(res=>
// 得到結(jié)果
console.log(res)
})
如上述代碼所示,我們對(duì) baidu.com
發(fā)起了一個(gè)網(wǎng)絡(luò)請(qǐng)求损痰,最終在 then 方法中得到了具體的響應(yīng)內(nèi)容福侈。
使用 Wireshark 抓包結(jié)果如下:
圖中可以看到,請(qǐng)求 baidu.com 時(shí)卢未,首先通過 TCP 3 次握手建立連接肪凛,然后通過 HTTP 傳輸內(nèi)容,最后通過 TCP 4 次揮手?jǐn)嚅_連接辽社。
真實(shí)的過程更加復(fù)雜伟墙,我們主要分析以下幾點(diǎn):
- 建立連接階段
- DNS 域名解析(應(yīng)用層)
- 建立 TCP 連接(傳輸層)
- 通過 IP 尋址找到目標(biāo)服務(wù)器(網(wǎng)絡(luò)層)
- 通過 Mac 尋址找到服務(wù)器硬件接口(數(shù)據(jù)鏈路層)
- 通過網(wǎng)線向服務(wù)器硬件接口傳輸比特信息(物理層)
- 發(fā)送數(shù)據(jù)階段
- 建立 SSL 安全連接(應(yīng)用層)
- 發(fā)送 HTTP 請(qǐng)求(應(yīng)用層)
建立連接階段
要獲取 baidu.com 的網(wǎng)頁內(nèi)容,就需要和 baidu 服務(wù)器建立連接爹袁,怎樣建立這個(gè)連接呢远荠?
- 通過 DNS 獲取 baidu 的 IP 地址矮固。
- 建立 TCP 連接失息。
DNS 域名解析
通過 DNS 解析,我們就能找到 baidu 服務(wù)器對(duì)應(yīng)的 IP 地址档址。
如圖:
經(jīng)過 DNS 解析后盹兢,我們就能得到 baidu.com 的 IP 地址了:39.156.69.79 和 220.181.38.148,通呈厣欤客戶端會(huì)隨機(jī)選中一個(gè) IP 地址進(jìn)行通信绎秒。
域名的解析步驟
其實(shí) IP 不一定要通過 DNS 解析才能獲取,它通常會(huì)被客戶端緩存尼摹,只有在 DNS 緩存都沒有命中的時(shí)候才會(huì)請(qǐng)求 DNS 服務(wù)器见芹。
判斷步驟如下:
- 判斷瀏覽器是否有緩存 IP 地址剂娄。
- 判斷本機(jī)是否有緩存該 IP 地址,如:檢查 Host 文件玄呛。
- 判斷本地域名解析服務(wù)器是否有緩存 IP 地址阅懦,如:電信,聯(lián)通等運(yùn)營(yíng)商徘铝。
- 向 DNS 根域名解析服務(wù)器耳胎,解析域名 IP 地址。
- 向 DNS 二根域名解析服務(wù)器惕它,解析域名 IP 地址怕午。
- 以此類推,最終獲得 IP 地址淹魄。
建立 TCP 連接
有了 IP 地址之后郁惜,客戶端和服務(wù)器端就能建立連接了,首先是建立 TCP 連接甲锡。
TCP 是一種面向連接的扳炬、可靠的、基于字節(jié)流的傳輸層通信協(xié)議搔体。
在這一層恨樟,我們傳輸?shù)臄?shù)據(jù)會(huì)按照一個(gè)個(gè)的字節(jié)裝入報(bào)文中,當(dāng)報(bào)文的長(zhǎng)度達(dá)到最大分段(MSS)時(shí)疚俱,就會(huì)發(fā)送這個(gè)報(bào)文劝术。如果傳輸?shù)膱?bào)文很長(zhǎng),可能會(huì)被拆分成多個(gè) TCP 報(bào)文進(jìn)行傳輸呆奕。
TCP 報(bào)文頭如下:
我們主要看以下幾點(diǎn):
- 源端口养晋、目的端口。
- 序列號(hào):seq梁钾,報(bào)文的唯一標(biāo)識(shí)绳泉。
- 確認(rèn)號(hào):ack,報(bào)文的確認(rèn)標(biāo)識(shí)姆泻,便于確認(rèn) seq 是否已經(jīng)收到零酪。
- TCP 標(biāo)記:
- SYN 為 1 表示這是連接請(qǐng)求或是連接接受請(qǐng)求。用于創(chuàng)建連接和同步序列號(hào)拇勃。
- ACK 為 1 表示確認(rèn)號(hào)字段有效四苇。注意這里大寫的 ACK 只是一個(gè)標(biāo)記,和確認(rèn)號(hào) ack 并不相同方咆。
- FIN 為 1 表示要求釋放連接月腋。
- 窗口:表示發(fā)送方可以接收的字節(jié)數(shù),即接收窗口大小,用于流量控制榆骚。
接下來片拍,我們看一下 TCP 是怎樣建立連接的?
如圖所示妓肢,建立 TCP 連接需要 3 個(gè)步驟穆碎,俗稱三次握手。
- 第一次握手:客戶端向服務(wù)器端發(fā)送序列號(hào) seq=x 的標(biāo)識(shí)职恳,表示開始建立連接所禀。
- 第二次握手:服務(wù)器端回發(fā)一個(gè) ack=x+1 的標(biāo)識(shí),表示確認(rèn)收到第一次握手放钦,同時(shí)發(fā)送自己的標(biāo)識(shí) seq=y色徘。
- 客戶端確認(rèn)自己發(fā)出的數(shù)據(jù)能夠被服務(wù)器端收到。
- 第三次握手:客戶端發(fā)送 ack=y+1 的標(biāo)識(shí)操禀,標(biāo)識(shí)確認(rèn)收到第二次握手褂策。
- 服務(wù)器端確認(rèn)自己發(fā)出的數(shù)據(jù)能夠被客戶端收到。
經(jīng)過了 3 次握手颓屑,即保證了客戶端和服務(wù)器端都能正常發(fā)送和接收數(shù)據(jù)斤寂,TCP 連接也就建立成功了。
TCP 可靠傳輸原理
上文中說到揪惦,TCP 是可靠的傳輸遍搞,這是為什么呢?
這是因?yàn)?TCP 內(nèi)部使用了 停止等待協(xié)議 ARQ 器腋,它通過 確認(rèn) 和 重傳 機(jī)制溪猿,實(shí)現(xiàn)了信息的可靠傳輸。
例如:
- 客戶端發(fā)送數(shù)據(jù) M1
- 服務(wù)器端確認(rèn)數(shù)據(jù) M1 收到
- 客戶端發(fā)送數(shù)據(jù) M2
- 服務(wù)器端確認(rèn)數(shù)據(jù) M2 收到
- 依次類推 ...
在這期間纫塌,如果某一條數(shù)據(jù)很久都沒有得到確認(rèn)诊县,客戶端就會(huì)重傳這條數(shù)據(jù)。這樣一來措左,對(duì)于與每一次發(fā)送的數(shù)據(jù)依痊,服務(wù)器端都得到了確認(rèn),即保證了數(shù)據(jù)的可靠性怎披。
雖然 ARQ 可以滿足數(shù)據(jù)可靠性胸嘁,但每次只能發(fā)送和確認(rèn)一個(gè)請(qǐng)求,效率太低了钳枕,于是就產(chǎn)生了連續(xù) ARQ 協(xié)議。
連續(xù) ARQ 協(xié)議 會(huì)連續(xù)發(fā)送一組數(shù)據(jù),然后再批量等待這一組數(shù)據(jù)的確認(rèn)信息蝌借,好比把單線程 ARQ 變成了多線程指蚁,大大提高了資源的利用效率。
如:
- 客戶端發(fā)送數(shù)據(jù) M1凝化、M2酬荞、M3搓劫、M4。
- 服務(wù)器端確認(rèn)數(shù)據(jù) M4 收到混巧,表示 M4 及之前的數(shù)據(jù)都收到了咧党。
- 客戶端發(fā)送數(shù)據(jù) M5、M6深员、M7蛙埂、M8。
- 服務(wù)器端確認(rèn)數(shù)據(jù) M8 收到滔迈,表示 M8 及之前的數(shù)據(jù)都收到了燎悍。
在這個(gè)流程中盼理,服務(wù)器端不需要對(duì)每一個(gè)數(shù)據(jù)都返回確認(rèn)信息宏怔,而是接收到多個(gè)數(shù)據(jù)時(shí)一并確認(rèn)臊诊,這個(gè)方式叫做 累計(jì)確認(rèn)。
這里有個(gè)疑問抓艳,TCP 的每一次握手,是怎么找到目的服務(wù)器呢儡首?
答:通過 IP 協(xié)議蔬胯。
根據(jù) IP 協(xié)議找到目標(biāo)服務(wù)器
IP 協(xié)議的目的是實(shí)現(xiàn)網(wǎng)絡(luò)層的數(shù)據(jù)轉(zhuǎn)發(fā)氛濒,它通過路由器不斷跳轉(zhuǎn),最終把數(shù)據(jù)成功送達(dá)目的地京景。
上文中的每一次 TCP 握手以及數(shù)據(jù)交互醋粟,都是通過 IP 協(xié)議去傳輸?shù)摹?/p>
IP 報(bào)文頭如下:
我們關(guān)注以下兩點(diǎn)就可以了:
- 源 IP 地址
- 目的 IP 地址
發(fā)起一個(gè) IP 請(qǐng)求執(zhí)行流程如下:
- 構(gòu)建 IP 請(qǐng)求頭(源 IP米愿、目標(biāo) IP)鼻吮。
- IP 協(xié)議通過算法椎木,計(jì)算出一條通往服務(wù)器端的路徑香椎。
- 發(fā)送端查詢路由表,找出下一跳的 IP 地址(通常是路由器)馍惹,并發(fā)送數(shù)據(jù)万矾。
- 路由器查詢路由表慎框,找出下一跳的 IP 地址笨枯,并發(fā)送數(shù)據(jù)。
- 不斷重復(fù)步驟 4窥突,直到找到目的局域網(wǎng)阻问。
- 發(fā)送數(shù)據(jù)称近。
路由表存在于計(jì)算機(jī)或路由器中哮塞,由目的 IP 地址忆畅、子網(wǎng)掩碼家凯、下一跳地址、發(fā)送接口四部分組成送粱。通過目的 IP 地址抗俄,即可找到下一跳的地址世舰,進(jìn)行轉(zhuǎn)發(fā)跟压。
例如:A 要向 G 發(fā)送 IP 數(shù)據(jù)裆馒。
具體流程如下:
- A 生成 IP 頭部(源 IP:A 喷好,目的 IP:G)
- A 查詢路由表梗搅,發(fā)現(xiàn)下一跳為 B效览,于是把數(shù)據(jù)傳給 B丐枉。
- B 生成 IP 頭部(源 IP:A 瘦锹,目的 IP:G)
- B 查詢路由表闪盔,發(fā)現(xiàn)下一跳為 E泪掀,于是把數(shù)據(jù)傳給 E异赫。
- E 生成 IP 頭部(源 IP:A ,目的 IP:G)
- E 查詢路由表鼠证,發(fā)現(xiàn)下一跳為 G名惩,于是把數(shù)據(jù)傳給 G娩鹉。
- 到達(dá)目的地 G稚伍。
你是否有疑惑个曙,為什么 IP 會(huì)按照這條路徑向 G 傳輸數(shù)據(jù)呢垦搬?
其實(shí),上圖中的路徑并非只有一條对雪,我們通過 ABEG 到達(dá)了目的地 G瑟捣,同樣也可以通過 ABCFHG 到達(dá) G迈套,這兩種路徑都能完成任務(wù)桑李,為什么 IP 不選擇 ABCFHG 這條路徑呢?
這就涉及到了 IP 尋址的算法星岗。
IP 尋址算法
我們可以把網(wǎng)絡(luò)中的所有計(jì)算機(jī)都看做是一個(gè)點(diǎn),計(jì)算機(jī)之間的連接看做是一條線圈浇,這些點(diǎn)和線就組合成了一個(gè)圖磷蜀。
例如:
通過上圖褐隆,我們就把復(fù)雜的網(wǎng)絡(luò)轉(zhuǎn)化成了數(shù)學(xué)問題庶弃。IP 尋址算法德澈,其實(shí)就是圖論中的最短路徑的算法梆造。
最短路徑算法在 IP 協(xié)議中有 2 種實(shí)現(xiàn):
- RIP 協(xié)議
- 使用距離矢量算法镇辉,確保 IP 路由跳轉(zhuǎn)的次數(shù)最小忽肛。
- 原理
- 每個(gè)節(jié)點(diǎn)中都保存有其他節(jié)點(diǎn)的位置信息(跳數(shù)和下一跳的 IP)。
- 通過和鄰居節(jié)點(diǎn)進(jìn)行數(shù)據(jù)交換箍镜,更新自己到目的地的最短距離色迂,不斷重復(fù)歇僧,即可得到起點(diǎn)到終點(diǎn)的最短路徑诈悍。
- 實(shí)現(xiàn)簡(jiǎn)單侥钳,開銷很小,適用于小型網(wǎng)絡(luò)苦酱。
- OSPF 協(xié)議
- 使用迪杰斯特拉算法疫萤,確保 IP 路由跳轉(zhuǎn)的速度最快扯饶。
- 原理
- 從起始點(diǎn)開始尾序,采用貪心算法的策略饶辙,每次遍歷到始點(diǎn)距離最近且未訪問過的頂點(diǎn)的鄰接節(jié)點(diǎn)弃揽,直到擴(kuò)展到終點(diǎn)為止矿微。
- 適用于大型網(wǎng)絡(luò)涌矢。
通過以上兩個(gè)協(xié)議娜庇,我們就能找到通往目的地的路徑了。
這里拋出一個(gè)問題:IP 數(shù)據(jù)是怎樣從一個(gè)路由器跳到另一個(gè)路由器呢藕溅?
答:通過以太網(wǎng)協(xié)議继榆。
通過 Mac 尋址找到服務(wù)器硬件接口
IP 協(xié)議主要是用來尋找最優(yōu)路徑的略吨,具體的傳輸是由以太網(wǎng)協(xié)議來做的翠忠。
以太網(wǎng)屬于數(shù)據(jù)鏈路層负间,它主要負(fù)責(zé)相鄰設(shè)備的通信政溃。原理是通過查詢交換機(jī) Mac 表董虱,找到通信雙方的物理接口愤诱,進(jìn)而開始通信捐友。
以太網(wǎng)報(bào)文頭如下:
我們只用關(guān)心以下 3 個(gè)點(diǎn):
- 源 Mac 地址
- 目的 Mac 地址
- 校驗(yàn)碼 CRC:校驗(yàn)當(dāng)前幀是否有效科吭。
可以看到对人,以太網(wǎng)層都是通過 Mac 地址進(jìn)行通信的牺弄,這里的 Mac 地址是哪里來的呢宜狐?
答:通過 ARP 協(xié)議。
ARP 協(xié)議 是一個(gè)通過解析 IP 地址來找尋 Mac 地址的協(xié)議豁陆。IP 地址轉(zhuǎn)換成 Mac 地址后盒音,就能進(jìn)行以太網(wǎng)數(shù)據(jù)傳輸了祥诽。
例如:
當(dāng)機(jī)器 A 向機(jī)器 C 發(fā)送數(shù)據(jù)時(shí):
- A 構(gòu)建以太網(wǎng)報(bào)文(源地址:A,目的地址:C)维哈,并通過網(wǎng)卡發(fā)出數(shù)據(jù)幀登澜。
- 數(shù)據(jù)幀到達(dá)交換機(jī) B脑蠕,交換機(jī)取出目的地址 C 的 Mac 地址谴仙。
- B 查詢 Mac 表晃跺,根據(jù)目的地 Mac 地址掀虎,匹配 C 的硬件接口涩盾。
- 如果找到 C 的硬件接口春霍,發(fā)送數(shù)據(jù)。
- 如果未找到 C 的硬件接口芹枷,向 B 直連的所有機(jī)器發(fā)送廣播信息找 C鸳慈,找到后會(huì)把 C 記錄到 Mac 表中走芋。
經(jīng)過上述的流程翁逞,我們就找到了目的機(jī)器的硬件接口。
通過以太網(wǎng)協(xié)議状植,我們找到了目標(biāo)機(jī)器的硬件接口津畸,接下來要怎么發(fā)送信息呢肉拓?
答:通過物理層帝簇。
通過網(wǎng)線向服務(wù)器硬件接口傳輸比特信息
在沒有 WiFi 的年代,我們只能通過插網(wǎng)線來進(jìn)行上網(wǎng),網(wǎng)線其實(shí)就是物理層的設(shè)備之一抱环。
網(wǎng)線可以由多種材料組成镇草,最常見的就是光纖和電纜梯啤。
光纖和電纜的傳輸原理類似,都是通過兩個(gè)信號(hào)來模擬二進(jìn)制數(shù)據(jù)的祟偷,一個(gè)信號(hào)即為一個(gè)比特修肠。
- 電纜中:高電位表示 1 嵌施,低點(diǎn)位表示 0吗伤。
- 光纖中:光亮表示 1蒋川,光熄滅表示 0牲芋。
如:在光纖中,我們通過觀察光的閃動(dòng)捺球,即可得知傳輸?shù)亩M(jìn)制數(shù)據(jù)缸浦。
有了這些物理設(shè)備,我們就能把復(fù)雜的數(shù)據(jù)轉(zhuǎn)換成光信號(hào)或者電信號(hào)進(jìn)行傳輸了氮兵。
發(fā)送數(shù)據(jù)階段
發(fā)送數(shù)據(jù)可以分為兩個(gè)步驟:
- 建立安全層 SSL
- 發(fā)送 HTTP 請(qǐng)求
建立安全層 SSL
本文的案例是發(fā)送一個(gè) HTTPS 的請(qǐng)求裂逐,所以在發(fā)送數(shù)據(jù)之前泣栈,會(huì)創(chuàng)建一個(gè) SSL 安全層卜高,用于數(shù)據(jù)加密。
通常的加密方法有兩種:
- 非對(duì)稱加密
- A 有鑰匙南片,B 沒有鑰匙掺涛,且他們都有一個(gè)公共的鎖,B 給 A 發(fā)送數(shù)據(jù)時(shí)疼进,都會(huì)先把數(shù)據(jù)鎖起來再發(fā)送薪缆。
- 接收數(shù)據(jù)時(shí),A 用鑰匙解開鎖伞广,即可得到數(shù)據(jù)拣帽。除 A 以外,其他人沒有鑰匙嚼锄,也就獲取不到數(shù)據(jù)减拭。
- 實(shí)現(xiàn)了單向通信加密。
- 對(duì)稱加密
- A区丑、B 雙方都有一把相同的鑰匙和一個(gè)公共的鎖拧粪,每次發(fā)送數(shù)據(jù)時(shí)修陡,都把數(shù)據(jù)放在鎖里進(jìn)行發(fā)送。
- 接收數(shù)據(jù)時(shí)既们,A濒析、B 雙方就用各自的鑰匙來解鎖。其他人沒有鑰匙啥纸,也就獲取不到數(shù)據(jù)号杏。
- 實(shí)現(xiàn)了雙向通信加密。
互聯(lián)網(wǎng)通信是雙向的斯棒,所以我們需要使用對(duì)稱加密盾致,可是,怎樣才能保證通信雙方都有一把相同的鑰匙呢荣暮?
目前的解決方案:
- 先使用非對(duì)稱加密庭惜,進(jìn)行秘鑰協(xié)商,讓通信雙方拿到相同的鑰匙穗酥。
- 然后使用對(duì)稱加密护赊,進(jìn)行加密傳輸。
秘鑰協(xié)商過程如圖:
圖中劃重點(diǎn):
- 客戶端發(fā)送自身支持的加密算法砾跃。
- 服務(wù)器端選擇一種加密算法骏啰,同時(shí)返回?cái)?shù)字證書。
- 客戶端確認(rèn)證書有效抽高。
- 客戶端生成隨機(jī)數(shù)判耕,并使用證書中的服務(wù)器公鑰加密,然后發(fā)送給服務(wù)器翘骂。
- 服務(wù)器端使用私鑰解密壁熄,獲得隨機(jī)數(shù)。
- 雙方使用第 2 步確定的加密算法碳竟,把隨機(jī)數(shù)進(jìn)行加密草丧,即可獲得相同的對(duì)稱加密秘鑰。
Ok莹桅,秘鑰協(xié)商之后方仿,我們的 SSL 安全層也就建好了。
秘鑰協(xié)商時(shí)存在一個(gè)問題:
秘鑰協(xié)商時(shí)统翩,怎么保證是和真正的服務(wù)器在協(xié)商,而不是一個(gè)中間人呢此洲?
答:數(shù)字證書厂汗。
數(shù)字證書重點(diǎn)關(guān)注 2 個(gè)部分:
- 服務(wù)器公鑰
- 數(shù)字簽名
其中,數(shù)字簽名又是由服務(wù)器公鑰和證書私鑰加密生成的呜师,目的是為了防止服務(wù)器公鑰被篡改娶桦。
有了數(shù)字證書,客戶端就能通過驗(yàn)證證書,來判斷服務(wù)器是否是真正的服務(wù)器了衷畦。
驗(yàn)證邏輯如下:
可以看到栗涂,數(shù)字證書通過同樣的算法進(jìn)行解密,如果得到相同的信息摘要祈争,就能保證數(shù)據(jù)是有效的斤程,如果不一致,則會(huì)驗(yàn)證失敗菩混,拒絕后續(xù)的請(qǐng)求忿墅。
到這里為止,所有的準(zhǔn)備工作都就緒了沮峡,接下來才是發(fā)送 HTTP 請(qǐng)求疚脐。
發(fā)送 HTTP 請(qǐng)求
HTTP 協(xié)議其實(shí)就是制定了一個(gè)通信規(guī)則奠蹬,規(guī)定了客戶端和服務(wù)器之間的通信格式只盹。
以請(qǐng)求 baidu 首頁為例:
如上圖所示胁塞,發(fā)起 HTTP 請(qǐng)求時(shí)账嚎,必須遵守以下規(guī)則:
- 請(qǐng)求方法(必填)
GET
- 請(qǐng)求地址(必填)
/
- HTTP 協(xié)議版本(必填)
1.1
- 其他 HTTP 頭部字段(可選)
Host
腊尚、User-Agent
帅韧、Accept
- 請(qǐng)求參數(shù)枪眉,放在空行后面(可選)
服務(wù)器響應(yīng)請(qǐng)求時(shí)狸驳,同樣遵守了 HTTP 響應(yīng)規(guī)則:
- HTTP 協(xié)議版本(必填)
1.1
- 響應(yīng)狀態(tài)碼(必填)
200
- 狀態(tài)碼描述(必填)
OK
- 其他 HTTP 頭部字段(可選)
Date
乡摹、Server
役耕、ETag
、Last-Modified
等 - 請(qǐng)求參數(shù)聪廉,放在空行后面(可選)
只要我們遵守這個(gè)規(guī)則瞬痘,就能進(jìn)行 HTTP 通信了。
到目前為止板熊,我們已經(jīng)分析完成了數(shù)據(jù)請(qǐng)求的所有過程框全,你是否都理解了呢?
思考與總結(jié)
本文通過一個(gè)網(wǎng)絡(luò)請(qǐng)求干签,對(duì)整個(gè) HTTP津辩、TCP、IP容劳、以太網(wǎng)等協(xié)議進(jìn)行了流程化分析喘沿,最后再梳理一下:
- 請(qǐng)求 baidu.com。
- DNS 解析 baidu.com竭贩,得到 IP 地址蚜印。
- 建立 TCP 連接。
- IP 協(xié)議通過算法留量,計(jì)算出一條通往服務(wù)器最優(yōu)路徑窄赋。
- IP 沿著路徑跳轉(zhuǎn)時(shí)哟冬,會(huì)通過 ARP 協(xié)議把 IP 地址轉(zhuǎn)換成 Mac 地址。
- 以太網(wǎng)通過 Mac 地址忆绰,找到通信雙方的硬件接口浩峡。
- 物理層通過網(wǎng)線作為載體,在兩個(gè)硬件接口之間傳輸比特信號(hào)错敢。
- TCP 連接建立完畢翰灾。
- 建立 SSL 安全層。
- 發(fā)送 HTTP 請(qǐng)求伐债。
最后预侯,歡迎關(guān)注公眾號(hào)【前端日志】,一起參加分享技術(shù)峰锁!