前端学习/ Day1/HTTP简单易懂/GET POST/HTTP特性/HTTP与HTTPS/HTTP版本演变/加解密数字签名数字证书
How Does The Internet Work ?
假設(shè)有十臺(tái)電腦 每個(gè)電腦有9個(gè)插口
那么需要45根網(wǎng)線
太麻煩
如果把這些電腦都連到一臺(tái)路由器上
那么只需要10根網(wǎng)線
如果要連接成百上千臺(tái)電腦
那就需要路由器連路由器
有點(diǎn)接近互聯(lián)網(wǎng)了
在家里我們會(huì)發(fā)現(xiàn)有根線接了進(jìn)來
電話📞
電話也是一種網(wǎng)絡(luò)
為了連接這種網(wǎng)絡(luò)
需要調(diào)制解調(diào)器
就是 modem
可以把網(wǎng)絡(luò)信息變成modem可以處理的信息
反之亦然
所以我們可以 modem 連 modem
為了把信息從我們的網(wǎng)絡(luò)發(fā)到我們想要到達(dá)的地方
需要把網(wǎng)絡(luò)連接到 ISP (運(yùn)營商 互聯(lián)網(wǎng)服務(wù)提供商)
ISP管理這些路由器
所以互聯(lián)網(wǎng)大概就是
PCA - Router - Modem - ISP1(Modem-Router) - ISP2 - ISP3 - Modem - Router - PCB
PCA 要發(fā)給PCB發(fā)信息
那么PCA需要知道PCB的地址
即 IP地址 xxx.xxx.xxx.xxx 例如192.168.1.1
為了好記,用域名來代替他
例 google.com = 172.217.7.14
互聯(lián)網(wǎng)(Internet)是基礎(chǔ)設(shè)施
而網(wǎng)絡(luò)(Web)是建立再這種基礎(chǔ)設(shè)施之上的服務(wù)
Client ----Server
服務(wù)器是存儲(chǔ)網(wǎng)頁、站點(diǎn)、應(yīng)用的計(jì)算機(jī)
當(dāng)Client想要獲取一個(gè)網(wǎng)頁
就從服務(wù)器上下載到客戶端(電腦、手機(jī))上的瀏覽器顯示
除了客戶端和服務(wù)器
還要了解:
舉個(gè)栗子
你聽說一點(diǎn)點(diǎn)的奶茶好喝,想喝,
但是具體是哪里的一點(diǎn)點(diǎn)呢,這時(shí)候打開地圖(DNS)一查,原來在福建福州啊(IP地址) ,于是下單,買了10杯奶茶,留下了姓名電話地址,并要求發(fā)順豐(HTTP)
讓我們視角轉(zhuǎn)到一點(diǎn)點(diǎn)奶茶店。
為了打包奶茶,在路途上不撒出來,有規(guī)定要先密封好,再用泡沫紙墊著,再用紙箱包著,再用透明膠捆著,再貼上快遞單,快遞單上寫明是什么奶茶,誰發(fā)的,發(fā)給誰,等信息,這大概就是TCP/IP 即定義數(shù)據(jù)如何傳輸?shù)?strong>通信協(xié)議
這一層層打包包裹和一層層拆包裹,因?yàn)橐粋€(gè)包裹要經(jīng)過好幾個(gè)快遞員手,所以數(shù)據(jù)包封裝也是這樣,
從上到下分別是應(yīng)用層、傳輸層、網(wǎng)絡(luò)層、數(shù)據(jù)鏈路層、物理層
在數(shù)據(jù)(奶茶)上要加TCP頭部(快遞單 假設(shè)送到順豐公司)、順豐快遞員拿到后 再加上IP頭部(從順豐到村子所在地方)、再加上MAC頭部(到達(dá)家門口),最后的物理層其實(shí)是比特流,物理介質(zhì) 網(wǎng)線
快遞到了家門口,我說是順豐嗎,他說是順豐,這才收下快遞
1、瀏覽器在DNS服務(wù)器上找到存放網(wǎng)頁的服務(wù)器的實(shí)際地址(一點(diǎn)點(diǎn)店的位置)
2、瀏覽器發(fā)HTTP請(qǐng)求信息到服務(wù)器(下單)這條消息,客戶端和服務(wù)器之間傳遞的數(shù)據(jù)都是通過互聯(lián)網(wǎng)使用TCP/IP協(xié)議傳輸?shù)?br /> 3、服務(wù)器同意客戶端的請(qǐng)求后,返回”200 OK“的信息,然后將網(wǎng)頁的文件以數(shù)據(jù)包的形式傳輸?shù)綖g覽器(快遞回來)
4、瀏覽器將數(shù)據(jù)包聚集成完整的網(wǎng)頁然后呈現(xiàn)給你看(奶茶到了家門口)
村子肯定要通路 才能讓快遞進(jìn)來 ( 網(wǎng)絡(luò)連接 web)
村子到福州的路 就像互聯(lián)網(wǎng) 錯(cuò)綜復(fù)雜
HTTP
1、基本知識(shí)
-
是什么?
超文本傳輸協(xié)議,是一個(gè)在計(jì)算機(jī)世界里專門在兩點(diǎn)之間傳輸文字、圖片、音頻、視頻等超文本數(shù)據(jù)的約定和規(guī)范。兩點(diǎn)不僅是服務(wù)器傳輸超文本到本地瀏覽器,也可以是服務(wù)器<–>服務(wù)器
-
狀態(tài)碼?
1xx:提示信息,是協(xié)議處理中的中間狀態(tài),實(shí)際用的比較少
2xx:服務(wù)器成功處理客戶端的請(qǐng)求,成功碼
200 OK :表示一切正常,如果是非HEAD請(qǐng)求,服務(wù)器返回的響應(yīng)頭會(huì)有body數(shù)據(jù)
204 No Content :與200 OK 基本相同,但是響應(yīng)頭里沒有body數(shù)據(jù)
206 Partial Content :應(yīng)用于 HTTP 分塊下載或斷電續(xù)傳,表示響應(yīng)返回的 body 數(shù)據(jù)并不是資源的全部,而是其中的一部分,也是服務(wù)器處理成功的狀態(tài)。3xx:需要客戶端用新的URL重新發(fā)送請(qǐng)求獲取資源,也就是重定向
301 Moved Permanently:永久重定向,說明請(qǐng)求的資源已經(jīng)不存在了,需改用新的 URL 再次訪問
302 Moved Permanently:臨時(shí)重定向,說明請(qǐng)求的資源還在,但暫時(shí)需要用另一個(gè) URL 來訪問
301 和 302 都會(huì)在響應(yīng)頭里使用字段 Location,指明后續(xù)要跳轉(zhuǎn)的 URL,瀏覽器會(huì)自動(dòng)重定向新的 URL
304 Not Modified:不具有跳轉(zhuǎn)的含義,表示資源未修改,重定向已存在的緩沖文件,也稱緩存重定向,用于緩存控制。4xx :表示客戶端發(fā)送的報(bào)文有誤,服務(wù)器無法處理,也就是錯(cuò)誤碼的含義
400 Bad Request:表示客戶端請(qǐng)求的報(bào)文有錯(cuò)誤,但只是個(gè)籠統(tǒng)的錯(cuò)誤。
403 Forbidden:表示服務(wù)器禁止訪問資源,并不是客戶端的請(qǐng)求出錯(cuò)
404 Not Found:表示請(qǐng)求的資源在服務(wù)器上不存在或未找到,所以無法提供給客戶端5xx :表示客戶端請(qǐng)求報(bào)文正確,但是服務(wù)器處理時(shí)內(nèi)部發(fā)生了錯(cuò)誤,屬于服務(wù)器端的錯(cuò)誤碼
500 Internal Server Error:與 400 類型,是個(gè)籠統(tǒng)通用的錯(cuò)誤碼,服務(wù)器發(fā)生了什么錯(cuò)誤,我們并不知道。
501 Not Implemented:表示客戶端請(qǐng)求的功能還不支持,類似“即將開業(yè),敬請(qǐng)期待”的意思。
502 Bad Gateway:通常是服務(wù)器作為網(wǎng)關(guān)或代理時(shí)返回的錯(cuò)誤碼,表示服務(wù)器自身工作正常,訪問后端服務(wù)器發(fā)生了錯(cuò)誤。
503 Service Unavailable:表示服務(wù)器當(dāng)前很忙,暫時(shí)無法響應(yīng)服務(wù)器,類似“網(wǎng)絡(luò)服務(wù)正忙,請(qǐng)稍后重試”的意思。 -
常見字段?
(1)Host 客戶端發(fā)送請(qǐng)求時(shí),用來指定服務(wù)器的域名
Host: http://www.A.com
(2)Content-Length 服務(wù)器在返回?cái)?shù)據(jù)時(shí),表明本次回應(yīng)的數(shù)據(jù)長度。
Content-Length: 1000
(3)Connection客戶端要求服務(wù)器使用 TCP 持久連接,以便其他請(qǐng)求復(fù)用。
Connection: keep-alive
(4)Content-Type 服務(wù)器回應(yīng)時(shí),告訴客戶端,本次數(shù)據(jù)是什么格式。
Content-Type: text/html; charset=utf-8
客戶端請(qǐng)求的時(shí)候,可以使用 Accept 字段聲明自己可以接受哪些數(shù)據(jù)格式。Accept: */ *表示接受所有數(shù)據(jù)格式
(5)Content-Encoding 服務(wù)器返回的數(shù)據(jù)使用了什么壓縮格式
Content-Encoding: gzip
Accept-Encoding: gzip, deflate
2、GET POST
-
區(qū)別 ?
GET Get 方法的含義是請(qǐng)求從服務(wù)器獲取資源,這個(gè)資源可以是靜態(tài)的文本、頁面、圖片視頻等
POST 向 URI 指定的資源提交數(shù)據(jù)(比如留言 瀏覽器就會(huì)執(zhí)行一次POST請(qǐng)求),數(shù)據(jù)就放在報(bào)文的 body 里,通過TCP協(xié)議發(fā)送到服務(wù)器 -
都是安全和冪等的嗎?
在 HTTP 協(xié)議里,所謂的「安全」是指請(qǐng)求方法不會(huì)「破壞」服務(wù)器上的資源。
所謂的「冪等」,意思是多次執(zhí)行相同的操作,結(jié)果都是「相同」的。那么很明顯 GET 方法就是安全且冪等的,因?yàn)樗恰钢蛔x」操作,無論操作多少次,服務(wù)器上的數(shù)據(jù)都是安全的,且每次的結(jié)果都是相同的。
POST 因?yàn)槭恰感略龌蛱峤粩?shù)據(jù)」的操作,會(huì)修改服務(wù)器上的資源,所以是不安全的,且多次提交數(shù)據(jù)就會(huì)創(chuàng)建多個(gè)資源,所以不是冪等的。
3、HTTP特性
-
優(yōu)點(diǎn) HTTP 最凸出的優(yōu)點(diǎn)是「簡單、靈活和易于擴(kuò)展、應(yīng)用廣泛和跨平臺(tái)」
-
缺點(diǎn) 無狀態(tài)、明文傳輸,同時(shí)還有一大缺點(diǎn)「不安全」
無狀態(tài)的好處,因?yàn)榉?wù)器不會(huì)去記憶 HTTP 的狀態(tài),所以不需要額外的資源來記錄狀態(tài)信息,這能減輕服務(wù)器的負(fù)擔(dān),能夠把更多的 CPU 和內(nèi)存用來對(duì)外提供服務(wù)。
無狀態(tài)的壞處,既然服務(wù)器沒有記憶能力,它在完成有關(guān)聯(lián)性的操作時(shí)會(huì)非常麻煩
無狀態(tài)的問題,解法方案有很多種,其中比較簡單的方式用 Cookie 技術(shù)
Cookie 通過在請(qǐng)求和響應(yīng)報(bào)文中寫入 Cookie 信息來控制客戶端的狀態(tài)
明文傳輸?shù)?strong>好處 ,在傳輸過程中的信息,是可方便閱讀的,通過瀏覽器的 F12 控制臺(tái)或 Wireshark 抓包都可以直接肉眼查看,為我們調(diào)試工作帶了極大的便利性。
明文傳輸?shù)?strong>壞處,HTTP 的所有信息都暴露在了光天化日下,相當(dāng)于信息裸奔。在傳輸?shù)穆L的過程中,信息的內(nèi)容都毫無隱私可言,很容易就能被竊取,如果里面有你的賬號(hào)密碼信息,那你號(hào)沒了。
不安全:
通信使用明文(不加密),內(nèi)容可能會(huì)被竊聽。比如,賬號(hào)信息容易泄漏,那你號(hào)沒了。
不驗(yàn)證通信方的身份,因此有可能遭遇偽裝。比如,訪問假的淘寶、拼多多,那你錢沒了。
無法證明報(bào)文的完整性,所以有可能已遭篡改。比如,網(wǎng)頁上植入垃圾廣告,視覺污染,眼沒了。
HTTP 的安全問題,可以用HTTPS 也就是在 HTTP 與 TCP 層之間增加了 SSL/TLS 安全傳輸層 -
性能?
HTTP 協(xié)議是基于 TCP/IP,并且使用了「請(qǐng)求 - 應(yīng)答」的通信模式,所以性能的關(guān)鍵就在這兩點(diǎn)里
早期 HTTP/1.0 性能上的一個(gè)很大的問題,那就是每發(fā)起一個(gè)請(qǐng)求,都要新建一次 TCP 連接(三次握手),而且是串行請(qǐng)求,增加了通信開銷
為了解決上述 TCP 連接問題,HTTP/1.1 提出了長連接的通信方式,也叫持久連接。這種方式的好處在于減少了 TCP 連接的重復(fù)建立和斷開所造成的額外開銷,減輕了服務(wù)器端的負(fù)載。
管道網(wǎng)絡(luò)傳輸 即可在同一個(gè) TCP 連接里面,客戶端可以發(fā)起多個(gè)請(qǐng)求
以前的做法是,在同一個(gè)TCP連接里面,先發(fā)送 A 請(qǐng)求,然后等待服務(wù)器做出回應(yīng),收到后再發(fā)出 B 請(qǐng)求。管道機(jī)制則是允許瀏覽器同時(shí)發(fā)出 A 請(qǐng)求和 B 請(qǐng)求。
服務(wù)器還是按照順序,先回應(yīng) A 請(qǐng)求,完成后再回應(yīng) B 請(qǐng)求。要是 前面的回應(yīng)特別慢,后面就會(huì)有許多請(qǐng)求排隊(duì)等著。這稱為「隊(duì)頭堵塞」
「請(qǐng)求 - 應(yīng)答」的模式加劇了 HTTP 的性能問題
總之 HTTP/1.1 的性能一般般,后續(xù)的 HTTP/2 和 HTTP/3 就是在優(yōu)化 HTTP 的性能
4、HTTP HTTPS
-
區(qū)別 ?
HTTP 是超文本傳輸協(xié)議,信息是明文傳輸,存在安全風(fēng)險(xiǎn)的問題。
HTTPS 則解決 HTTP 不安全的缺陷,在 TCP 和 HTTP 之間加入了 SSL/TLS 安全協(xié)議,使得報(bào)文能夠加密傳輸。
HTTP 連接建立相對(duì)簡單, TCP 三次握手之后便可進(jìn)行 HTTP 的報(bào)文傳輸。而 HTTPS 在 TCP 三次握手之后,還需進(jìn)行 SSL/TLS 的握手過程,才可進(jìn)入加密報(bào)文傳輸。
HTTP 的端口號(hào)是 80,HTTPS 的端口號(hào)是 443
HTTPS 協(xié)議需要向 CA(證書權(quán)威機(jī)構(gòu))申請(qǐng)數(shù)字證書,來保證服務(wù)器的身份是可信的。 -
HTTPS解決了HTTP什么問題 ?
HTTP 由于是明文傳輸,所以安全上存在以下三個(gè)風(fēng)險(xiǎn):
竊聽風(fēng)險(xiǎn),比如通信鏈路上可以獲取通信內(nèi)容,用戶號(hào)容易沒。
篡改風(fēng)險(xiǎn),比如強(qiáng)制入垃圾廣告,視覺污染,用戶眼容易瞎。
偽裝風(fēng)險(xiǎn),比如冒充淘寶網(wǎng)站,用戶錢容易沒。
HTTPS 在 HTTP 與 TCP 層之間加入了 SSL/TLS 協(xié)議
信息加密:交互信息無法被竊取
校驗(yàn)機(jī)制:無法篡改通信內(nèi)容,篡改了就不能正常顯示,但百度「競價(jià)排名」依然可以搜索垃圾廣告。
身份證書:證明淘寶是真的淘寶網(wǎng) -
HTTPS如何解決HTTP不安全問題的 ?
HTTPS 采用的是對(duì)稱加密和非對(duì)稱加密結(jié)合的「混合加密」方式,解決了竊聽的風(fēng)險(xiǎn)
非對(duì)稱加密密鑰,對(duì)稱加密數(shù)據(jù)摘要算法的方式來實(shí)現(xiàn)完整性,它能夠?yàn)閿?shù)據(jù)生成獨(dú)一無二的「指紋」,指紋用于校驗(yàn)數(shù)據(jù)的完整性,解決了篡改的風(fēng)險(xiǎn)
客戶端先向服務(wù)器端索要公鑰,然后用公鑰加密信息,服務(wù)器收到密文后,用自己的私鑰解密。
這就存在些問題,如何保證公鑰不被篡改和信任度?
所以這里就需要借助第三方權(quán)威機(jī)構(gòu) CA (數(shù)字證書認(rèn)證機(jī)構(gòu)),將服務(wù)器公鑰放在數(shù)字證書(由數(shù)字證書認(rèn)證機(jī)構(gòu)頒發(fā))中,只要證書是可信的,公鑰就是可信的。通過數(shù)字證書的方式保證服務(wù)器公鑰的身份,解決冒充的風(fēng)險(xiǎn)
-
HTTPS如何建立連接,交互了什么 ?
SSL/TLS 協(xié)議基本流程:
客戶端向服務(wù)器索要并驗(yàn)證服務(wù)器的公鑰。
雙方協(xié)商生產(chǎn)「會(huì)話秘鑰」。
雙方采用「會(huì)話秘鑰」進(jìn)行加密通信。前兩步是 SSL/TLS 的建立過程,也就是握手階段,四次通信
ClientHello 客戶端向服務(wù)器發(fā)起加密通信請(qǐng)求
(1)客戶端支持的 SSL/TLS 協(xié)議版本,如 TLS 1.2 版本。
(2)客戶端生產(chǎn)的隨機(jī)數(shù)(Client Random),后面用于生產(chǎn)「會(huì)話秘鑰」。
(3)客戶端支持的密碼套件列表,如 RSA 加密算法。
SeverHello服務(wù)器收到客戶端請(qǐng)求后,向客戶端發(fā)出響應(yīng)
(1)確認(rèn) SSL/ TLS 協(xié)議版本,如果服務(wù)器不支持,則關(guān)閉加密通信。
(2)服務(wù)器生產(chǎn)的隨機(jī)數(shù)(Server Random),后面用于生產(chǎn)「會(huì)話秘鑰」。
(3)確認(rèn)的密碼套件列表,如 RSA 加密算法。
(4)服務(wù)器的數(shù)字證書。
客戶端回應(yīng)客戶端收到服務(wù)器的回應(yīng)之后,首先通過瀏覽器或者操作系統(tǒng)中的 CA 公鑰,確認(rèn)服務(wù)器的數(shù)字證書的真實(shí)性,如果證書沒有問題,客戶端會(huì)從數(shù)字證書中取出服務(wù)器的公鑰,然后使用它加密報(bào)文,向服務(wù)器發(fā)送如下信息,
(1)一個(gè)隨機(jī)數(shù)(pre-master key)。該隨機(jī)數(shù)會(huì)被服務(wù)器公鑰加密。
(2)加密通信算法改變通知,表示隨后的信息都將用「會(huì)話秘鑰」加密通信。
(3)客戶端握手結(jié)束通知,表示客戶端的握手階段已經(jīng)結(jié)束。這一項(xiàng)同時(shí)把之前所有內(nèi)容的發(fā)生的數(shù)據(jù)做個(gè)摘要,用來供服務(wù)端校驗(yàn)。
服務(wù)器的最后回應(yīng)服務(wù)器收到客戶端的第三個(gè)隨機(jī)數(shù)(pre-master key)之后,通過協(xié)商的加密算法,計(jì)算出本次通信的「會(huì)話秘鑰」。然后,向客戶端發(fā)生最后的信息:
(1)加密通信算法改變通知,表示隨后的信息都將用「會(huì)話秘鑰」加密通信。
(2)服務(wù)器握手結(jié)束通知,表示服務(wù)器的握手階段已經(jīng)結(jié)束。這一項(xiàng)同時(shí)把之前所有內(nèi)容的發(fā)生的數(shù)據(jù)做個(gè)摘要,用來供客戶端校驗(yàn)。
至此,整個(gè) SSL/TLS 的握手階段全部結(jié)束。接下來,客戶端與服務(wù)器進(jìn)入加密通信,就完全是使用普通的 HTTP 協(xié)議,只不過用「會(huì)話秘鑰」加密內(nèi)容。
5、HTTP/1.1 HTTP/2 HTT/3演變
-
1.1比1.0 提高了什么性能 ?
使用 TCP 長連接的方式改善了 HTTP/1.0 短連接造成的性能開銷。
支持管道(pipeline)網(wǎng)絡(luò)傳輸,只要第一個(gè)請(qǐng)求發(fā)出去了,不必等其回來,就可以發(fā)第二個(gè)請(qǐng)求出去,可以減少整體的響應(yīng)時(shí)間。
但 HTTP/1.1 還是有性能瓶頸:
請(qǐng)求 / 響應(yīng)頭部(Header)未經(jīng)壓縮就發(fā)送,首部信息越多延遲越大。只能壓縮 Body 的部分;
發(fā)送冗長的首部。每次互相發(fā)送相同的首部造成的浪費(fèi)較多;
服務(wù)器是按請(qǐng)求的順序響應(yīng)的,如果服務(wù)器響應(yīng)慢,會(huì)招致客戶端一直請(qǐng)求不到數(shù)據(jù),也就是隊(duì)頭阻塞;
沒有請(qǐng)求優(yōu)先級(jí)控制;
請(qǐng)求只能從客戶端開始,服務(wù)器只能被動(dòng)響應(yīng)。 -
HTTP/2 針對(duì) 1.1 做了什么優(yōu)化 ?
HTTP/2 協(xié)議是基于 HTTPS 的,所以 HTTP/2 的安全性也是有保障的
頭部壓縮 HTTP/2 會(huì)壓縮頭(Header)如果你同時(shí)發(fā)出多個(gè)請(qǐng)求,他們的頭是一樣的或是相似的,那么,協(xié)議會(huì)幫你消除重復(fù)的分。
這就是所謂的 HPACK 算法:在客戶端和服務(wù)器同時(shí)維護(hù)一張頭信息表,所有字段都會(huì)存入這個(gè)表,生成一個(gè)索引號(hào),以后就不發(fā)送同樣字段了,只發(fā)送索引號(hào),這樣就提高速度了。
二進(jìn)制格式HTTP/2 不再像 HTTP/1.1 里的純文本形式的報(bào)文,而是全面采用了二進(jìn)制格式。頭信息和數(shù)據(jù)體都是二進(jìn)制,并且統(tǒng)稱為幀(frame):頭信息幀和數(shù)據(jù)幀。
二進(jìn)制增加了數(shù)據(jù)傳輸?shù)男?/p>數(shù)據(jù)流 Stream HTTP/2 的數(shù)據(jù)包不是按順序發(fā)送的,同一個(gè)連接里面連續(xù)的數(shù)據(jù)包,可能屬于不同的回應(yīng)。因此,必須要對(duì)數(shù)據(jù)包做標(biāo)記,指出它屬于哪個(gè)回應(yīng)。
每個(gè)請(qǐng)求或回應(yīng)的所有數(shù)據(jù)包,稱為一個(gè)數(shù)據(jù)流
每個(gè)數(shù)據(jù)流都標(biāo)記著一個(gè)獨(dú)一無二的編號(hào),其中規(guī)定客戶端發(fā)出的數(shù)據(jù)流編號(hào)為奇數(shù), 服務(wù)器發(fā)出的數(shù)據(jù)流編號(hào)為偶數(shù)
客戶端還可以指定數(shù)據(jù)流的優(yōu)先級(jí)。優(yōu)先級(jí)高的請(qǐng)求,服務(wù)器就先響應(yīng)該請(qǐng)求多路復(fù)用 HTTP/2 是可以在一個(gè)連接中并發(fā)多個(gè)請(qǐng)求或回應(yīng),而不用按照順序一一對(duì)應(yīng)。
移除了 HTTP/1.1 中的串行請(qǐng)求,不需要排隊(duì)等待,也就不會(huì)再出現(xiàn)「隊(duì)頭阻塞」問題,降低了延遲,大幅度提高了連接的利用率。
服務(wù)器推送 Server Push,也叫 Cache Push,HTTP/2 還在一定程度上改善了傳統(tǒng)的「請(qǐng)求 - 應(yīng)答」工作模式,服務(wù)不再是被動(dòng)地響應(yīng),也可以主動(dòng)向客戶端發(fā)送消息。在瀏覽器剛請(qǐng)求 HTML 的時(shí)候,就提前把可能會(huì)用到的 JS、CSS 文件等靜態(tài)資源主動(dòng)發(fā)給客戶端,減少延時(shí)的等待 -
2 有哪些缺陷 ? 3 做了哪些優(yōu)化 ?
HTTP/2 主要的問題在于:多個(gè) HTTP 請(qǐng)求在復(fù)用一個(gè) TCP 連接,下層的 TCP 協(xié)議是不知道有多少個(gè) HTTP 請(qǐng)求的。所以一旦發(fā)生了丟包現(xiàn)象,就會(huì)觸發(fā) TCP 的重傳機(jī)制,這樣在一個(gè) TCP 連接中的所有的 HTTP 請(qǐng)求都必須等待這個(gè)丟了的包被重傳回來。
HTTP/1.1 中的管道( pipeline)傳輸中如果有一個(gè)請(qǐng)求阻塞了,那么隊(duì)列后請(qǐng)求也統(tǒng)統(tǒng)被阻塞住了
HTTP/2 多請(qǐng)求復(fù)用一個(gè)TCP連接,一旦發(fā)生丟包,就會(huì)阻塞住所有的 HTTP 請(qǐng)求。
這都是基于 TCP 傳輸層的問題,所以 HTTP/3 把 HTTP 下層的 TCP 協(xié)議改成了 UDP!
UDP 發(fā)生是不管順序,也不管丟包的,所以不會(huì)出現(xiàn) HTTP/1.1 的隊(duì)頭阻塞 和 HTTP/2 的一個(gè)丟包全部重傳問題。UDP 是不可靠傳輸?shù)?#xff0c;但基于 UDP 的 QUIC 協(xié)議 可以實(shí)現(xiàn)類似 TCP 的可靠性傳輸。
QUIC 有自己的一套機(jī)制可以保證傳輸?shù)目煽啃缘摹.?dāng)某個(gè)流發(fā)生丟包時(shí),只會(huì)阻塞這個(gè)流,其他流不會(huì)受到影響。
TL3 升級(jí)成了最新的 1.3 版本,頭部壓縮算法也升級(jí)成了 QPack
HTTPS 要建立一個(gè)連接,要花費(fèi) 6 次交互,先是建立三次握手,然后是 TLS/1.3 的三次握手。QUIC 直接把以往的 TCP 和 TLS/1.3 的 6 次交互合并成了 3 次,減少了交互次數(shù)。
所以, QUIC 是一個(gè)在 UDP 之上的偽 TCP + TLS + HTTP/2 的多路復(fù)用的協(xié)議。
QUIC 是新協(xié)議,對(duì)于很多網(wǎng)絡(luò)設(shè)備,根本不知道什么是 QUIC,只會(huì)當(dāng)做 UDP,這樣會(huì)出現(xiàn)新的問題。所以 HTTP/3 現(xiàn)在普及的進(jìn)度非常的緩慢,不知道未來 UDP 是否能夠逆襲 TCP。
總結(jié)
以上是生活随笔為你收集整理的前端学习/ Day1/HTTP简单易懂/GET POST/HTTP特性/HTTP与HTTPS/HTTP版本演变/加解密数字签名数字证书的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 工作34:第三方登录
- 下一篇: 前端学习(2150):webpack之配