自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

五分鐘技術(shù)趣談 | HTTP演進(jìn)史

網(wǎng)絡(luò)
本文從整體出發(fā)對(duì)主要的部分做粗淺的闡述,如果對(duì)某個(gè)點(diǎn)很感興趣,可以查閱相關(guān)代碼和RFC文檔。

Part 01

協(xié)議簡(jiǎn)介 

HTTP協(xié)議是當(dāng)今最流行的一種網(wǎng)絡(luò)協(xié)議,在日常生活中隨處可見,無(wú)論使用手機(jī)、電腦還是其它終端設(shè)備,windows、IOS或是Android,瀏覽器或是APP,這背后的網(wǎng)絡(luò)通訊都離不開它。HTTP采用客戶端-服務(wù)端之間請(qǐng)求和應(yīng)答的架構(gòu)設(shè)計(jì),是一種能夠獲取如 HTML這樣的網(wǎng)絡(luò)資源的通訊協(xié)議,是在 Web 上進(jìn)行數(shù)據(jù)交換的基礎(chǔ)。

Part 02

發(fā)展歷程 

HTTP協(xié)議自1989年被英國(guó)工程師和計(jì)算機(jī)科學(xué)家蒂姆·伯納斯·李提出后,至今經(jīng)歷30多年的演進(jìn),形成了五個(gè)主要版本,如下圖所示:

2.1 HTTP/0.9

作為鼻祖版本,奠定了協(xié)議的核心內(nèi)容,如確定了客戶端-服務(wù)端交互的架構(gòu),域名:端口來(lái)確定目標(biāo)地址,還有回車換行作為基本的分隔符等。

0.9版本功能上只相當(dāng)于后續(xù)版本的一個(gè)小小子集,不支持Header,僅支持GET方法,服務(wù)器只能回應(yīng)HTML格式的字符串,不能響應(yīng)別的格式。具有典型的無(wú)狀態(tài)性,每個(gè)訪問(wèn)都獨(dú)立處理,處理完成后就會(huì)關(guān)閉TCP連接。

2.2 HTTP/1.0

1.0版本在0.9版本基礎(chǔ)上做了大量的擴(kuò)展,增加了POST和HEAD方法,引入了請(qǐng)求頭、返回碼,還支持了多字符集和多行請(qǐng)求,傳輸不僅僅局限于文本能力,如圖像、視頻、二進(jìn)制文件??芍^是麻雀雖小五臟俱全,是第一個(gè)具備廣泛實(shí)際應(yīng)用價(jià)值的協(xié)議版本。

1.0版本與0.9版本存在相同的缺陷,由于都是無(wú)狀態(tài)連接,建立的TCP連接不能被復(fù)用,并且前一個(gè)請(qǐng)求響應(yīng)到達(dá)之后下一個(gè)請(qǐng)求才能發(fā)送,容易造成隊(duì)頭阻塞影響性能。

2.3 HTTP/1.1

1.1版本在1.0版本上做了功能擴(kuò)展以及傳輸性能的優(yōu)化。

功能包括新增了PUT、PATCH、OPTIONS、DELETE方法,豐富了響應(yīng)狀態(tài)碼,引入了range斷點(diǎn)續(xù)傳,增加了TLS的支持,以及更多的連接模型支持,如短連接、長(zhǎng)連接、websocket模型等;此外還引入了Host請(qǐng)求頭,用來(lái)指定服務(wù)器域名,這樣一臺(tái)主機(jī)上就可以部署多個(gè)域名服務(wù)端,這為虛擬化技術(shù)的興起打下了堅(jiān)實(shí)的基礎(chǔ)。

性能方面引入長(zhǎng)連接,設(shè)置請(qǐng)求頭Connection: keep-alive可以保持連接不斷開,使得連接能被多個(gè)請(qǐng)求復(fù)用,但每個(gè)請(qǐng)求是串行執(zhí)行,仍然存在隊(duì)頭阻塞問(wèn)題。為了優(yōu)化該問(wèn)題,在長(zhǎng)連接的基礎(chǔ)上引入了管道化技術(shù),可以不等待上一個(gè)請(qǐng)求響應(yīng)而繼續(xù)發(fā)送后續(xù)的請(qǐng)求,進(jìn)一步提升傳輸效率,然而服務(wù)端響應(yīng)是嚴(yán)格按照順序返回的,隊(duì)頭阻塞問(wèn)題依然沒(méi)有解決。

2.4 HTTP/2.0

2.0版本與其說(shuō)是對(duì)1.x版本的優(yōu)化,倒不如說(shuō)是一次革新,主要的調(diào)整主要包含:二進(jìn)制化分幀、多路復(fù)用、頭部壓縮、服務(wù)端推送。

- 二進(jìn)制化分幀

1.x是文本協(xié)議,然而2.0是以二進(jìn)制幀為基本單位,將所有傳輸?shù)男畔⒎指顬橄⒑蛶?,并采用二進(jìn)制格式的編碼,一幀中包含數(shù)據(jù)和標(biāo)識(shí)符,使得網(wǎng)絡(luò)傳輸變得高效而靈活。

- 多路復(fù)用

1.x中建立多個(gè)連接的消耗以及效率都存在問(wèn)題,2.0版本借助于二進(jìn)制幀中的標(biāo)識(shí)進(jìn)行區(qū)分,實(shí)現(xiàn)多個(gè)請(qǐng)求可以同時(shí)在一個(gè)TCP連接上并發(fā)的鏈路復(fù)用。

- 頭部壓縮

1.1版本每次發(fā)送請(qǐng)求都要帶相同的header,2.0版本使用HPACK算法對(duì)header進(jìn)行壓縮,且對(duì)header信息進(jìn)行增量更新,有效減少了數(shù)據(jù)量從而提高了傳輸效率。

- 服務(wù)端推送

和1.x版本采用的一問(wèn)一答交互模式不同,2.0版本允許服務(wù)器主動(dòng)向客戶端發(fā)送資源,從而可以有效減少額外的延遲時(shí)間。

HTTP/2.0的傳輸示意圖如下所示:

圖片

2.0版本雖然大幅提升了1.1版本的性能,然而基于TCP的實(shí)現(xiàn)卻遺留下3個(gè)問(wèn)題:

1.有序字節(jié)流引出的隊(duì)頭阻塞,使得2.0版本的多路復(fù)用能力大打折扣;

2.TCP與TLS疊加了握手時(shí)延,建連接時(shí)長(zhǎng)還有1倍的下降空間;

3. 基于TCP四元組確定一個(gè)連接,這種誕生于有線網(wǎng)絡(luò)的設(shè)計(jì),并不適合移動(dòng)狀態(tài)下的無(wú)線網(wǎng)絡(luò),這意味著IP地址的頻繁變動(dòng)會(huì)導(dǎo)致TCP連接、TLS會(huì)話反復(fù)握手,成本高昂。

2.5 HTTP/3.0

隨著5G網(wǎng)絡(luò)和互聯(lián)網(wǎng)技術(shù)的發(fā)展,目前過(guò)半的互聯(lián)網(wǎng)流量已經(jīng)通過(guò)無(wú)線傳輸。這種趨勢(shì)給整體的網(wǎng)絡(luò)瀏覽體驗(yàn)帶來(lái)了挑戰(zhàn),其中關(guān)鍵點(diǎn)在于解決在無(wú)線覆蓋率不足的情況下TCP中的隊(duì)頭阻塞問(wèn)題,3.0版本隨之應(yīng)運(yùn)而生。

HTTP/3.0又稱為HTTP Over QUIC,是最新一代HTTP協(xié)議,棄用TCP協(xié)議改為使用基于UDP協(xié)議的QUIC協(xié)議來(lái)實(shí)現(xiàn),QUIC協(xié)議的核心思想是將TCP協(xié)議在內(nèi)核實(shí)現(xiàn)的諸如可靠傳輸、流量控制、擁塞控制等功能轉(zhuǎn)移到用戶態(tài)來(lái)實(shí)現(xiàn),這樣就避開了TCP機(jī)制的天然缺陷。HTTP/3.0與HTTP/2.0架構(gòu)區(qū)別如下圖所示:

圖片

但是目前很多網(wǎng)絡(luò)設(shè)備對(duì)于UDP數(shù)據(jù)包策略不夠友好,進(jìn)行攔截從而導(dǎo)致成功連接率下降,此外正確安全的配置HTTP/3和QUIC極其復(fù)雜,要將其變?yōu)橐环N簡(jiǎn)單易用的商業(yè)服務(wù)路還很長(zhǎng)。

Part 03

回顧總結(jié) 

HTTP經(jīng)歷30多年的演化,實(shí)現(xiàn)了跨越式的發(fā)展,由最初只能串行的傳輸超文本文件到如今可以并行的傳輸多媒體文件,功能、性能以及安全性上都取得了巨大的提升。最后簡(jiǎn)短總結(jié)一下幾個(gè)里程碑版本:

  • HTTP/0.9 確立了交互架構(gòu),實(shí)現(xiàn)基本請(qǐng)求響應(yīng)。
  • HTTP/1.0 增加 HTTP 頭,豐富傳輸資源類型,奠定互聯(lián)網(wǎng)發(fā)展基礎(chǔ)。
  • HTTP/1.1 增加長(zhǎng)連接、管道化,提升了 HTTP 傳輸效率。
  • HTTP/2.0 采用二進(jìn)制傳輸格式,通過(guò) HTTP 多路復(fù)用、頭部壓縮、服務(wù)器端推送,將傳輸效率在 HTTP + TCP 架構(gòu)上發(fā)揮到了極致。
  • HTTP/3.0 將傳輸層替換為 QUIC,通過(guò)改進(jìn)的擁塞控制、流量控制、0-RTT 建連、傳輸層多路復(fù)用、連接遷移等特性,進(jìn)一步提升了 HTTP 傳輸效率。
責(zé)任編輯:龐桂玉 來(lái)源: 移動(dòng)Labs
相關(guān)推薦

2023-07-23 18:47:59

Docker開源

2023-04-15 20:25:23

微前端

2023-07-02 16:09:57

人工智能人臉識(shí)別

2023-07-02 16:34:06

GPU虛擬化深度學(xué)習(xí)

2023-09-12 07:10:13

Nacos架構(gòu)

2023-07-31 08:55:15

AI技術(shù)網(wǎng)絡(luò)暴力

2023-07-12 15:50:29

機(jī)器學(xué)習(xí)人工智能

2023-08-29 06:50:01

Javamaven

2024-12-18 14:10:33

2023-08-06 07:00:59

Openstack網(wǎng)絡(luò)

2023-08-15 14:46:03

2023-09-17 17:51:43

Android 14

2023-07-12 16:03:37

Android開發(fā)架構(gòu)

2023-08-06 06:55:29

數(shù)字可視化物聯(lián)網(wǎng)

2023-09-02 20:22:42

自動(dòng)化測(cè)試軟件開發(fā)

2023-08-07 06:35:07

系統(tǒng)限流

2021-09-18 11:36:38

混沌工程云原生故障

2023-07-12 16:13:01

2023-06-03 21:14:47

Linux

2023-06-03 21:06:05

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)