HTTPS和HTTP2.0詳解


title: HTTPS和HTTP2.0詳解
date: 2018-05-21 14:19:31
tags:

  • HTTP
  • HTTPS
  • HTTP2.0
    categories: 深入http

HTTP的基本優(yōu)化

影響一個(gè)HTTP網(wǎng)絡(luò)請(qǐng)求的因素主要有兩個(gè):帶寬和延遲嘁信。

帶寬:如果說我們還停留在撥號(hào)上網(wǎng)的階段折柠,帶寬可能會(huì)成為一個(gè)比較嚴(yán)重影響請(qǐng)求的問題沸版,但是現(xiàn)在網(wǎng)絡(luò)基礎(chǔ)建設(shè)已經(jīng)使得帶寬得到極大的提升您旁,我們不再會(huì)擔(dān)心由帶寬而影響網(wǎng)速赢织,那么就只剩下延遲了允蚣。
延遲

  1. 瀏覽器阻塞(HOL blocking):瀏覽器會(huì)因?yàn)橐恍┰蜃枞?qǐng)求粥血。瀏覽器對(duì)于同一個(gè)域名,同時(shí)只能有 4 個(gè)連接(這個(gè)根據(jù)瀏覽器內(nèi)核不同可能會(huì)有所差異)坪仇,超過瀏覽器最大連接數(shù)限制杂腰,后續(xù)請(qǐng)求就會(huì)被阻塞。
  2. DNS 查詢(DNS Lookup):瀏覽器需要知道目標(biāo)服務(wù)器的 IP 才能建立連接椅文。將域名解析為 IP 的這個(gè)系統(tǒng)就是 DNS喂很。這個(gè)通常可以利用DNS緩存結(jié)果來達(dá)到減少這個(gè)時(shí)間的目的皆刺。
  3. 建立連接(Initial connection):HTTP 是基于 TCP 協(xié)議的少辣,瀏覽器最快也要在第三次握手時(shí)才能捎帶 HTTP 請(qǐng)求報(bào)文,達(dá)到真正的建立連接羡蛾,但是這些連接無法復(fù)用會(huì)導(dǎo)致每次請(qǐng)求都經(jīng)歷三次握手和慢啟動(dòng)漓帅。三次握手在高延遲的場(chǎng)景下影響較明顯,慢啟動(dòng)則對(duì)文件類大請(qǐng)求影響較大痴怨。

HTTP1.0和HTTP1.1的一些區(qū)別

HTTP1.0最早在網(wǎng)頁(yè)中使用是在1996年忙干,那個(gè)時(shí)候只是使用一些較為簡(jiǎn)單的網(wǎng)頁(yè)上和網(wǎng)絡(luò)請(qǐng)求上,而HTTP1.1則在1999年才開始廣泛應(yīng)用于現(xiàn)在的各大瀏覽器網(wǎng)絡(luò)請(qǐng)求中浪藻,同時(shí)HTTP1.1也是當(dāng)前使用最為廣泛的HTTP協(xié)議捐迫。 主要區(qū)別主要體現(xiàn)在:

  1. 緩存處理,在HTTP1.0中主要使用header里的If-Modified-Since,Expires來做為緩存判斷的標(biāo)準(zhǔn)爱葵,HTTP1.1則引入了更多的緩存控制策略例如Entity tag施戴,If-Unmodified-Since, If-Match, If-None-Match等更多可供選擇的緩存頭來控制緩存策略。
  2. 帶寬優(yōu)化及網(wǎng)絡(luò)連接的使用萌丈,HTTP1.0中赞哗,存在一些浪費(fèi)帶寬的現(xiàn)象,例如客戶端只是需要某個(gè)對(duì)象的一部分辆雾,而服務(wù)器卻將整個(gè)對(duì)象送過來了肪笋,并且不支持?jǐn)帱c(diǎn)續(xù)傳功能,HTTP1.1則在請(qǐng)求頭引入了range頭域,它允許只請(qǐng)求資源的某個(gè)部分涂乌,即返回碼是206(Partial Content),這樣就方便了開發(fā)者自由的選擇以便于充分利用帶寬和連接英岭。
  3. 錯(cuò)誤通知的管理湾盒,在HTTP1.1中新增了24個(gè)錯(cuò)誤狀態(tài)響應(yīng)碼,如409(Conflict)表示請(qǐng)求的資源與資源的當(dāng)前狀態(tài)發(fā)生沖突诅妹;410(Gone)表示服務(wù)器上的某個(gè)資源被永久性的刪除罚勾。
  4. Host頭處理,在HTTP1.0中認(rèn)為每臺(tái)服務(wù)器都綁定一個(gè)唯一的IP地址吭狡,因此尖殃,請(qǐng)求消息中的URL并沒有傳遞主機(jī)名(hostname)。但隨著虛擬主機(jī)技術(shù)的發(fā)展划煮,在一臺(tái)物理服務(wù)器上可以存在多個(gè)虛擬主機(jī)(Multi-homed Web Servers)送丰,并且它們共享一個(gè)IP地址。HTTP1.1的請(qǐng)求消息和響應(yīng)消息都應(yīng)支持Host頭域弛秋,且請(qǐng)求消息中如果沒有Host頭域會(huì)報(bào)告一個(gè)錯(cuò)誤(400 Bad Request)器躏。
  5. 長(zhǎng)連接,HTTP 1.1支持長(zhǎng)連接(PersistentConnection)和請(qǐng)求的流水線(Pipelining)處理蟹略,在一個(gè)TCP連接上可以傳送多個(gè)HTTP請(qǐng)求和響應(yīng)登失,減少了建立和關(guān)閉連接的消耗和延遲,在HTTP1.1中默認(rèn)開啟Connection: keep-alive挖炬,一定程度上彌補(bǔ)了HTTP1.0每次請(qǐng)求都要?jiǎng)?chuàng)建連接的缺點(diǎn)揽浙。

HTTPS

HTTP 有以下安全性問題:

  1. 使用明文進(jìn)行通信,內(nèi)容可能會(huì)被竊聽意敛;
  2. 不驗(yàn)證通信方的身份馅巷,通信方的身份有可能遭遇偽裝;
  3. 無法證明報(bào)文的完整性草姻,報(bào)文有可能遭篡改令杈。

HTTPS可以理解為 HTTP+SSL/TLS, 即 HTTP 下加入 SSL 層碴倾,HTTPS 的安全基礎(chǔ)是 SSL逗噩,因此加密的詳細(xì)內(nèi)容就需要 SSL,用于安全的 HTTP 數(shù)據(jù)傳輸跌榔。
HTTPS 并不是新協(xié)議异雁,而是讓 HTTP 先和 SSL(Secure Sockets Layer)通信,再由 SSL 和 TCP 通信僧须。也就是說 HTTPS 使用了隧道進(jìn)行通信纲刀。
通過使用 SSL,HTTPs 具有了加密(防竊聽)担平、認(rèn)證(防偽裝)和完整性保護(hù)(防篡改)

對(duì)稱秘鑰加密和非對(duì)稱秘鑰加密

對(duì)稱密鑰加密

對(duì)稱密鑰加密(Symmetric-Key Encryption)示绊,加密的加密和解密使用同一密鑰锭部。

優(yōu)點(diǎn):運(yùn)算速度快;
缺點(diǎn):密鑰容易被獲取面褐。

公開密鑰加密

公開密鑰加密(Public-Key Encryption)拌禾,也稱為非對(duì)稱密鑰加密,使用一對(duì)密鑰用于加密和解密展哭,分別為公開密鑰和私有密鑰湃窍。公開密鑰所有人都可以獲得,通信發(fā)送方獲得接收方的公開密鑰之后匪傍,就可以使用公開密鑰進(jìn)行加密您市,接收方收到通信內(nèi)容后使用私有密鑰解密。

優(yōu)點(diǎn):更為安全役衡;
缺點(diǎn):運(yùn)算速度慢茵休;

HTTPS 采用混合的加密機(jī)制,使用公開密鑰加密用于傳輸對(duì)稱密鑰來保證安全性手蝎,之后使用對(duì)稱密鑰加密進(jìn)行通信來保證效率泽篮。

原理圖:


How-HTTPS-Works.png

HTTPS性能問題

  1. HTTPS 降低用戶訪問速度。SSL握手柑船,HTTPS 對(duì)速度會(huì)有一定程度的降低帽撑,但是只要經(jīng)過合理優(yōu)化和部署,HTTPS 對(duì)速度的影響完全可以接受鞍时。在很多場(chǎng)景下亏拉,HTTPS 速度完全不遜于 HTTP,如果使用 SPDY逆巍,HTTPS 的速度甚至還要比 HTTP 快及塘。
  2. 相對(duì)于HTTPS降低訪問速度,其實(shí)更需要關(guān)心的是服務(wù)器端的CPU壓力锐极,HTTPS中大量的密鑰算法計(jì)算笙僚,會(huì)消耗大量的CPU資源,只有足夠的優(yōu)化灵再,HTTPS 的機(jī)器成本才不會(huì)明顯增加肋层。

使用SPDY

2012年google如一聲驚雷提出了SPDY的方案,大家才開始從正面看待和解決老版本HTTP協(xié)議本身的問題翎迁,SPDY可以說是綜合了HTTPS和HTTP兩者有點(diǎn)于一體的傳輸協(xié)議栋猖,主要解決:

  1. 降低延遲,針對(duì)HTTP高延遲的問題汪榔,SPDY優(yōu)雅的采取了多路復(fù)用(multiplexing)蒲拉。多路復(fù)用通過多個(gè)請(qǐng)求stream共享一個(gè)tcp連接的方式,解決了HOL blocking的問題,降低了延遲同時(shí)提高了帶寬的利用率雌团。
  2. 請(qǐng)求優(yōu)先級(jí)(request prioritization)燃领。多路復(fù)用帶來一個(gè)新的問題是,在連接共享的基礎(chǔ)之上有可能會(huì)導(dǎo)致關(guān)鍵請(qǐng)求被阻塞锦援。SPDY允許給每個(gè)request設(shè)置優(yōu)先級(jí)猛蔽,這樣重要的請(qǐng)求就會(huì)優(yōu)先得到響應(yīng)。比如瀏覽器加載首頁(yè)雨涛,首頁(yè)的html內(nèi)容應(yīng)該優(yōu)先展示,之后才是各種靜態(tài)資源文件懦胞,腳本文件等加載替久,這樣可以保證用戶能第一時(shí)間看到網(wǎng)頁(yè)內(nèi)容。
  3. header壓縮躏尉。前面提到HTTP1.x的header很多時(shí)候都是重復(fù)多余的蚯根。選擇合適的壓縮算法可以減小包的大小和數(shù)量。
  4. 基于HTTPS的加密協(xié)議傳輸胀糜,大大提高了傳輸數(shù)據(jù)的可靠性颅拦。
  5. 服務(wù)端推送(server push),采用了SPDY的網(wǎng)頁(yè)教藻,例如我的網(wǎng)頁(yè)有一個(gè)sytle.css的請(qǐng)求距帅,在客戶端收到sytle.css數(shù)據(jù)的同時(shí),服務(wù)端會(huì)將sytle.js的文件推送給客戶端括堤,當(dāng)客戶端再次嘗試獲取sytle.js時(shí)就可以直接從緩存中獲取到碌秸,不用再發(fā)請(qǐng)求了。SPDY構(gòu)成圖:
SPDY.png

HTTP2.0

HTTP2.0可以說是SPDY的升級(jí)版(其實(shí)原本也是基于SPDY設(shè)計(jì)的)悄窃,但是讥电,HTTP2.0 跟 SPDY 仍有不同的地方,主要是以下兩點(diǎn):

  • HTTP2.0 支持明文 HTTP 傳輸轧抗,而 SPDY 強(qiáng)制使用 HTTPS
  • HTTP2.0 消息頭的壓縮算法采用 HPACK恩敌,而非 SPDY 采用的 DEFLATE

HTTP2.0的新特性

  • 新的二進(jìn)制格式(Binary Format),HTTP1.x的解析是基于文本横媚【琅冢基于文本協(xié)議的格式解析存在天然缺陷,文本的表現(xiàn)形式有多樣性灯蝴,要做到健壯性考慮的場(chǎng)景必然很多抗碰,二進(jìn)制則不同,只認(rèn)0和1的組合绽乔』∮基于這種考慮HTTP2.0的協(xié)議解析決定采用二進(jìn)制格式,實(shí)現(xiàn)方便且健壯。
  • 多路復(fù)用(MultiPlexing)看疗,即連接共享沙峻,即每一個(gè)request都是是用作連接共享機(jī)制的。一個(gè)request對(duì)應(yīng)一個(gè)id两芳,這樣一個(gè)連接上可以有多個(gè)request摔寨,每個(gè)連接的request可以隨機(jī)的混雜在一起,接收方可以根據(jù)request的 id將request再歸屬到各自不同的服務(wù)端請(qǐng)求里面怖辆。多路復(fù)用
  • header壓縮是复,如上文中所言,對(duì)前面提到過HTTP1.x的header帶有大量信息竖螃,而且每次都要重復(fù)發(fā)送淑廊,HTTP2.0使用encoder來減少需要傳輸?shù)膆eader大小,通訊雙方各自cache一份header fields表特咆,既避免了重復(fù)header的傳輸季惩,又減小了需要傳輸?shù)拇笮 ?/li>
  • 服務(wù)端推送(server push),同SPDY一樣腻格,HTTP2.0也具有server push功能画拾。目前,有大多數(shù)網(wǎng)站已經(jīng)啟用HTTP2.0菜职,例如YouTuBe青抛,淘寶網(wǎng)等網(wǎng)站,利用chrome控制臺(tái)可以查看是否啟用H2酬核。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末脂凶,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子愁茁,更是在濱河造成了極大的恐慌蚕钦,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鹅很,死亡現(xiàn)場(chǎng)離奇詭異嘶居,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)促煮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門邮屁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人菠齿,你說我怎么就攤上這事佑吝。” “怎么了绳匀?”我有些...
    開封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵芋忿,是天一觀的道長(zhǎng)炸客。 經(jīng)常有香客問我,道長(zhǎng)戈钢,這世上最難降的妖魔是什么痹仙? 我笑而不...
    開封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮殉了,結(jié)果婚禮上开仰,老公的妹妹穿的比我還像新娘。我一直安慰自己薪铜,他們只是感情好众弓,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著隔箍,像睡著了一般谓娃。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鞍恢,一...
    開封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天傻粘,我揣著相機(jī)與錄音每窖,去河邊找鬼帮掉。 笑死,一個(gè)胖子當(dāng)著我的面吹牛窒典,可吹牛的內(nèi)容都是我干的蟆炊。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼瀑志,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼涩搓!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起劈猪,我...
    開封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤昧甘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后战得,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體充边,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年常侦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了浇冰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡聋亡,死狀恐怖肘习,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情坡倔,我是刑警寧澤漂佩,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布脖含,位于F島的核電站,受9級(jí)特大地震影響仅仆,放射性物質(zhì)發(fā)生泄漏器赞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一墓拜、第九天 我趴在偏房一處隱蔽的房頂上張望港柜。 院中可真熱鬧,春花似錦咳榜、人聲如沸夏醉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)畔柔。三九已至,卻和暖如春臣樱,著一層夾襖步出監(jiān)牢的瞬間靶擦,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工雇毫, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留玄捕,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓棚放,卻偏偏與公主長(zhǎng)得像枚粘,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子飘蚯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

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