一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

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

 windxn 2018-08-03

作者: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管線(xiàn)化(pipelining)理論,客戶(hù)端可以同時(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之前,不如先直觀(guān)比較一下HTTP2和HTTP1.1的區(qū)別:


  • https://http2./demo



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


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



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

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


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


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


  • 多路復(fù)用意味著線(xiàn)頭阻塞將不在是一個(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消息并在客戶(hù)端與服務(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ù)端與客戶(hù)端之間不斷的交換數(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ù)?/span>


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ì)話(huà)聊天。

  • 中古時(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??赡?y拿到收到的數(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./blog/2011/08/what_is_a_digital_signature.html

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

    • https://www.jianshu.com/p/9db57e761255


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



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



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



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

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

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

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

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

  • 服務(wù)器拿到這個(gè)加密的密鑰,解密獲取密鑰,再使用對(duì)稱(chēng)加密算法,和用戶(hù)完成接下來(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í)交流~


參考資料:


  • 《圖解HTTP》

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀(guān)點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多

    国产偷拍精品在线视频| 色婷婷亚洲精品综合网| 欧美日韩精品久久亚洲区熟妇人| 欧美一区日韩二区亚洲三区| 91久久精品国产成人| 国产欧美日韩精品一区二| 国产又粗又猛又爽色噜噜| 成人精品欧美一级乱黄| 日韩黄色一级片免费收看| 91欧美视频在线观看免费| 久久精品国产亚洲av麻豆| 又黄又色又爽又免费的视频| 激情亚洲内射一区二区三区| 久久精品一区二区少妇| 日韩午夜老司机免费视频| 国产精品国产亚洲区久久| 在线观看视频成人午夜| 国产成人免费激情视频| 日本午夜一本久久久综合| 人体偷拍一区二区三区| 国产激情一区二区三区不卡| 精品精品国产欧美在线| 国产精品日本女优在线观看| 亚洲男人的天堂就去爱| 99久热只有精品视频免费看| 亚洲精品国产福利在线| 五月婷日韩中文字幕四虎| 国产亚洲系列91精品| 国产亚洲欧美日韩精品一区 | 99久久精品午夜一区二| 国产精品不卡高清在线观看| 国产av大片一区二区三区| 亚洲一区二区三区熟女少妇| 精品精品国产自在久久高清| 久久精品福利在线观看| 日韩在线视频精品视频| 中文字幕日韩精品人一妻| 亚洲视频一区二区久久久| 中文字字幕在线中文乱码二区| 日韩中文无线码在线视频| 免费观看一级欧美大片|