關(guān)于 HTTP2 和 HTTPS,這些你必須要知道

作者:Java3y


本文力求簡(jiǎn)單講清每個(gè)知識(shí)點(diǎn)官觅,希望大家看完能有所收獲

一纵菌、HTTP協(xié)議的今生來(lái)世

最近在看博客的時(shí)候,發(fā)現(xiàn)有的面試題已經(jīng)考HTTP/2了缰猴,于是我就順著去了解一下产艾。

到現(xiàn)在為止疤剑,HTTP協(xié)議已經(jīng)有三個(gè)版本了:

HTTP1.0

HTTP1.1

HTTP/2

下面就簡(jiǎn)單聊聊他們?nèi)叩膮^(qū)別滑绒,以及整理一些必要的額外知識(shí)點(diǎn)。

1.1 HTTP版本之間的區(qū)別

1.1.1 HTTP1.0和HTTP1.1區(qū)別

HTTP1.0和HTTP1.1最主要的區(qū)別就是:

HTTP1.1默認(rèn)是持久化連接隘膘!

在HTTP1.0默認(rèn)是短連接:


簡(jiǎn)單來(lái)說(shuō)就是:每次與服務(wù)器交互疑故,都需要新開(kāi)一個(gè)連接!




試想一下:請(qǐng)求一張圖片弯菊,新開(kāi)一個(gè)連接纵势,請(qǐng)求一個(gè)CSS文件,新開(kāi)一個(gè)連接管钳,請(qǐng)求一個(gè)JS文件钦铁,新開(kāi)一個(gè)連接。HTTP協(xié)議是基于TCP的才漆,TCP每次都要經(jīng)過(guò)三次握手牛曹,四次揮手,慢啟動(dòng)...這都需要去消耗我們非常多的資源的醇滥!

在HTTP1.1中默認(rèn)就使用持久化連接來(lái)解決:建立一次連接黎比,多次請(qǐng)求均由這個(gè)連接完成超营!(如果阻塞了,還是會(huì)開(kāi)新的TCP連接的)


相對(duì)于持久化連接還有另外比較重要的改動(dòng):

HTTP 1.1增加host字段

HTTP 1.1中引入了Chunked transfer-coding阅虫,范圍請(qǐng)求演闭,實(shí)現(xiàn)斷點(diǎn)續(xù)傳(實(shí)際上就是利用HTTP消息頭使用分塊傳輸編碼,將實(shí)體主體分塊傳輸)

HTTP 1.1管線化(pipelining)理論颓帝,客戶端可以同時(shí)發(fā)出多個(gè)HTTP請(qǐng)求米碰,而不用一個(gè)個(gè)等待響應(yīng)之后再請(qǐng)求

注意:這個(gè)pipelining僅僅是限于理論場(chǎng)景下,大部分桌面瀏覽器仍然會(huì)選擇默認(rèn)關(guān)閉HTTP pipelining购城!

所以現(xiàn)在使用HTTP1.1協(xié)議的應(yīng)用见间,都是有可能會(huì)開(kāi)多個(gè)TCP連接的!

參考資料:

https://www.cnblogs.com/gofighting/p/5421890.html

1.1.2 HTTP2基礎(chǔ)

在說(shuō)HTTP2之前工猜,不如先直觀比較一下HTTP2和HTTP1.1的區(qū)別:

https://http2.akamai.com/demo


上面也已經(jīng)說(shuō)了米诉,HTTP 1.1提出了管線化(pipelining)理論,但是僅僅是限于理論的階段上篷帅,這個(gè)功能默認(rèn)還是關(guān)閉了的史侣。

管線化(pipelining)和非管線化的區(qū)別:





HTTP Pipelining其實(shí)是把多個(gè)HTTP請(qǐng)求放到一個(gè)TCP連接中一一發(fā)送,而在發(fā)送過(guò)程中不需要等待服務(wù)器對(duì)前一個(gè)請(qǐng)求的響應(yīng)魏身;只不過(guò)惊橱,客戶端還是要按照發(fā)送請(qǐng)求的順序來(lái)接收響應(yīng)!

就像在超市收銀臺(tái)或者銀行柜臺(tái)排隊(duì)時(shí)一樣箭昵,你并不知道前面的顧客是干脆利索的還是會(huì)跟收銀員/柜員磨蹭到世界末日(不管怎么說(shuō)税朴,服務(wù)器(即收銀員/柜員)是要按照順序處理請(qǐng)求的,如果前一個(gè)請(qǐng)求非常耗時(shí)(顧客磨蹭)家制,那么后續(xù)請(qǐng)求都會(huì)受到影響正林。

在HTTP1.0中,發(fā)送一次請(qǐng)求時(shí)颤殴,需要等待服務(wù)端響應(yīng)了才可以繼續(xù)發(fā)送請(qǐng)求觅廓。

在HTTP1.1中,發(fā)送一次請(qǐng)求時(shí)涵但,不需要等待服務(wù)端響應(yīng)了就可以發(fā)送請(qǐng)求了杈绸,但是回送數(shù)據(jù)給客戶端的時(shí)候,客戶端還是需要按照響應(yīng)的順序來(lái)一一接收

所以說(shuō)矮瘟,無(wú)論是HTTP1.0還是HTTP1.1提出了Pipelining理論瞳脓,還是會(huì)出現(xiàn)阻塞的情況。從專(zhuān)業(yè)的名詞上說(shuō)這種情況澈侠,叫做線頭阻塞(Head of line blocking)簡(jiǎn)稱(chēng):HOLB

1.1.3 HTTP1.1和HTTP2區(qū)別

HTTP2與HTTP1.1最重要的區(qū)別就是解決了線頭阻塞的問(wèn)題劫侧!其中最重要的改動(dòng)是:多路復(fù)用 (Multiplexing)

多路復(fù)用意味著線頭阻塞將不在是一個(gè)問(wèn)題,允許同時(shí)通過(guò)單一的 HTTP/2 連接發(fā)起多重的請(qǐng)求-響應(yīng)消息埋涧,合并多個(gè)請(qǐng)求為一個(gè)的優(yōu)化將不再適用板辽。

(我們知道:HTTP1.1中的Pipelining是沒(méi)有付諸于實(shí)際的)奇瘦,之前為了減少HTTP請(qǐng)求,有很多操作將多個(gè)請(qǐng)求合并劲弦,比如:Spriting(多個(gè)圖片合成一個(gè)圖片)耳标,內(nèi)聯(lián)Inlining(將圖片的原始數(shù)據(jù)嵌入在CSS文件里面的URL里),拼接Concatenation(一個(gè)請(qǐng)求就將其下載完多個(gè)JS文件)邑跪,分片Sharding(將請(qǐng)求分配到各個(gè)主機(jī)上)......

使用了HTTP2可能是這樣子的:


HTTP2所有性能增強(qiáng)的核心在于新的二進(jìn)制分幀層(不再以文本格式來(lái)傳輸了)次坡,它定義了如何封裝http消息并在客戶端與服務(wù)器之間傳輸。


看上去協(xié)議的格式和HTTP1.x完全不同了画畅,實(shí)際上HTTP2并沒(méi)有改變HTTP1.x的語(yǔ)義砸琅,只是把原來(lái)HTTP1.x的header和body部分用frame重新封裝了一層而已


HTTP2連接上傳輸?shù)拿總€(gè)幀都關(guān)聯(lián)到一個(gè)“流”。流是一個(gè)獨(dú)立的轴踱,雙向的幀序列可以通過(guò)一個(gè)HTTP2的連接在服務(wù)端與客戶端之間不斷的交換數(shù)據(jù)症脂。


實(shí)際上運(yùn)輸時(shí):


HTTP2還有一些比較重要的改動(dòng):

使用HPACK對(duì)HTTP/2頭部壓縮

服務(wù)器推送

HTTP2推送資料:https://segmentfault.com/a/1190000015773338

流量控制

針對(duì)傳輸中的流進(jìn)行控制(TCP默認(rèn)的粒度是針對(duì)連接)

流優(yōu)先級(jí)(Stream Priority)它被用來(lái)告訴對(duì)端哪個(gè)流更重要。

1.2 HTTP2總結(jié)

HTTP1.1新改動(dòng):

持久連接

請(qǐng)求管道化

增加緩存處理(新的字段如cache-control)

增加Host字段淫僻、支持?jǐn)帱c(diǎn)傳輸?shù)?/p>

HTTP2新改動(dòng):

二進(jìn)制分幀

多路復(fù)用

頭部壓縮

服務(wù)器推送

參考資料:

因鏈接較多诱篷,請(qǐng)?zhí)D(zhuǎn)至原文查看

1.3 HTTPS再次回顧

之前在面試的時(shí)候被問(wèn)到了HTTPS,SSL這樣的知識(shí)點(diǎn)雳灵,也沒(méi)答上來(lái)棕所,這里也簡(jiǎn)單整理一下。

首先還是來(lái)解釋一下基礎(chǔ)的東東:

對(duì)稱(chēng)加密:

加密和解密都是用同一個(gè)密鑰

非對(duì)稱(chēng)加密:

加密用公開(kāi)的密鑰悯辙,解密用私鑰

(私鑰只有自己知道琳省,公開(kāi)的密鑰大家都知道)

數(shù)字簽名:

驗(yàn)證傳輸?shù)膬?nèi)容是對(duì)方發(fā)送的數(shù)據(jù)

發(fā)送的數(shù)據(jù)沒(méi)有被篡改過(guò)

數(shù)字證書(shū)(Certificate Authority)簡(jiǎn)稱(chēng)CA

認(rèn)證機(jī)構(gòu)證明是真實(shí)的服務(wù)器發(fā)送的數(shù)據(jù)。

3y的通訊之路:

遠(yuǎn)古時(shí)代:3y和女朋友聊天傳輸數(shù)據(jù)之間沒(méi)有任何的加密躲撰,直接傳輸

內(nèi)容被看得一清二楚针贬,毫無(wú)隱私可言

上古時(shí)期:使用對(duì)稱(chēng)加密的方式來(lái)保證傳輸?shù)臄?shù)據(jù)只有兩個(gè)人知道

此時(shí)有個(gè)問(wèn)題:密鑰不能通過(guò)網(wǎng)絡(luò)傳輸(因?yàn)闆](méi)有加密之前,都是不安全的)茴肥,所以3y和女朋友先約見(jiàn)面一次坚踩,告訴對(duì)方密碼是多少荡灾,再對(duì)話聊天瓤狐。

中古時(shí)期:3y不單單要跟女朋友聊天,還要跟爸媽聊天的哇(同樣不想泄漏了自己的通訊信息)批幌。那有那么多人础锐,難道每一次都要約來(lái)見(jiàn)面一次嗎?(說(shuō)明維護(hù)多個(gè)對(duì)稱(chēng)密鑰是麻煩的荧缘!)--->所以用到了非對(duì)稱(chēng)加密

3y自己保留一份密碼皆警,獨(dú)一無(wú)二的(私鑰)。告訴3y女朋友截粗,爸媽一份密碼(這份密碼是公開(kāi)的信姓,誰(shuí)都可以拿--->公鑰)鸵隧。讓他們給我發(fā)消息之前,先用那份我告訴他們的密碼加密一下意推,再發(fā)送給我豆瘫。我收到信息之后,用自己獨(dú)一無(wú)二的私鑰解密就可以了菊值!

近代:此時(shí)又出現(xiàn)一個(gè)問(wèn)題:雖然別人不知道私鑰是什么外驱,拿不到你原始傳輸?shù)臄?shù)據(jù)占卧,但是可以拿到加密后的數(shù)據(jù)诗力,他們可以改掉某部分的數(shù)據(jù)再發(fā)送給服務(wù)器瘫里,這樣服務(wù)器拿到的數(shù)據(jù)就不是完整的了媒殉。

3y女朋友給3y發(fā)了一條信息”3y我喜歡你“譬涡,然后用3y給的公鑰加密澎粟,發(fā)給3y了唉韭。此時(shí)不懷好意的人截取到這條加密的信息陶珠,他破解不了原信息柔逼。但是他可以修改加密后的數(shù)據(jù)再傳給3y杭煎。可能3y拿到收到的數(shù)據(jù)就是”3y你今晚跪鍵盤(pán)吧“

現(xiàn)代:拿到的數(shù)據(jù)可能被篡改了卒落,我們可以使用數(shù)字簽名來(lái)解決被篡改的問(wèn)題羡铲。數(shù)字簽名其實(shí)也可以看做是非對(duì)稱(chēng)加密的手段一種,具體是這樣的:得到原信息hash值儡毕,用私鑰對(duì)hash值加密也切,另一端用公鑰解密,最后比對(duì)hash值是否變了腰湾。如果變了就說(shuō)明被篡改了雷恃。(一端用私鑰加密,另一端用公鑰解密费坊,也確保了來(lái)源)

目前現(xiàn)在:好像使用了數(shù)字簽名就萬(wàn)無(wú)一失了倒槐,其實(shí)還有問(wèn)題。我們使用非對(duì)稱(chēng)加密的時(shí)候附井,是使用公鑰進(jìn)行加密的讨越。如果公鑰被偽造了,后面的數(shù)字簽名其實(shí)就毫無(wú)意義了永毅。講到底:還是可能會(huì)被中間人攻擊~(yú)此時(shí)我們就有了CA認(rèn)證機(jī)構(gòu)來(lái)確認(rèn)公鑰的真實(shí)性把跨!

對(duì)于數(shù)字簽名和CA認(rèn)證還是不太了解參考一下

阮一峰:

http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html

什么是數(shù)字簽名和證書(shū)?

http://www.reibang.com/p/9db57e761255

回到我們的HTTPS沼死,HTTPS其實(shí)就是在HTTP協(xié)議下多加了一層SSL協(xié)議(ps:現(xiàn)在都用TLS協(xié)議了)


HTTPS采用的是混合方式加密:


過(guò)程是這樣子的:




用戶向web服務(wù)器發(fā)起一個(gè)安全連接的請(qǐng)求

服務(wù)器返回經(jīng)過(guò)CA認(rèn)證的數(shù)字證書(shū)着逐,證書(shū)里面包含了服務(wù)器的public key(公鑰)

用戶拿到數(shù)字證書(shū),用自己瀏覽器內(nèi)置的CA證書(shū)解密得到服務(wù)器的public key

用戶用服務(wù)器的public key加密一個(gè)用于接下來(lái)的對(duì)稱(chēng)加密算法的密鑰,傳給web服務(wù)器

因?yàn)橹挥蟹?wù)器有private key可以解密耸别,所以不用擔(dān)心中間人攔截這個(gè)加密的密鑰

服務(wù)器拿到這個(gè)加密的密鑰健芭,解密獲取密鑰,再使用對(duì)稱(chēng)加密算法秀姐,和用戶完成接下來(lái)的網(wǎng)絡(luò)通信



所以相比HTTP吟榴,HTTPS 傳輸更加安全

(1) 所有信息都是加密傳播,黑客無(wú)法竊聽(tīng)囊扳。

(2) 具有校驗(yàn)機(jī)制吩翻,一旦被篡改,通信雙方會(huì)立刻發(fā)現(xiàn)锥咸。

(3) 配備身份證書(shū)狭瞎,防止身份被冒充。

參考資料:

因鏈接較多搏予,請(qǐng)?zhí)D(zhuǎn)至原文查看

二熊锭、總結(jié)

我只是在學(xué)習(xí)的過(guò)程中,把自己遇到的問(wèn)題寫(xiě)出來(lái)雪侥,整理出來(lái)碗殷,希望可以對(duì)大家有幫助。如果文章有錯(cuò)的地方速缨,希望大家可以在評(píng)論區(qū)指正锌妻,一起學(xué)習(xí)交流~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市旬牲,隨后出現(xiàn)的幾起案子仿粹,更是在濱河造成了極大的恐慌,老刑警劉巖原茅,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吭历,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡擂橘,警方通過(guò)查閱死者的電腦和手機(jī)晌区,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)通贞,“玉大人朗若,你說(shuō)我怎么就攤上這事』担” “怎么了捡偏?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)峡迷。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么绘搞? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任彤避,我火速辦了婚禮,結(jié)果婚禮上夯辖,老公的妹妹穿的比我還像新娘琉预。我一直安慰自己,他們只是感情好蒿褂,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布圆米。 她就那樣靜靜地躺著,像睡著了一般啄栓。 火紅的嫁衣襯著肌膚如雪娄帖。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,144評(píng)論 1 285
  • 那天昙楚,我揣著相機(jī)與錄音近速,去河邊找鬼。 笑死堪旧,一個(gè)胖子當(dāng)著我的面吹牛削葱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播淳梦,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼析砸,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了爆袍?” 一聲冷哼從身側(cè)響起干厚,我...
    開(kāi)封第一講書(shū)人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎螃宙,沒(méi)想到半個(gè)月后蛮瞄,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡谆扎,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年挂捅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片堂湖。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡闲先,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出无蜂,到底是詐尸還是另有隱情伺糠,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布斥季,位于F島的核電站训桶,受9級(jí)特大地震影響累驮,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜舵揭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一谤专、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧午绳,春花似錦置侍、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至赎败,卻和暖如春秕衙,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背螟够。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工灾梦, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人妓笙。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓若河,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親寞宫。 傳聞我的和親對(duì)象是個(gè)殘疾皇子萧福,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容