中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

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

2019-06-11    來源:

容器云強勢上線!快速搭建集群,上萬Linux鏡像隨意使用

一、HTTP協(xié)議的今生來世

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

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

  • HTTP1.0
  • HTTP1.1
  • HTTP/2

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

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)是短連接:

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

簡單來說就是:每次與服務(wù)器交互,都需要新開一個連接!

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

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

試想一下:請求一張圖片,新開一個連接,請求一個CSS文件,新開一個連接,請求一個JS文件,新開一個連接。HTTP協(xié)議是基于TCP的,TCP每次都要經(jīng)過三次握手,四次揮手,慢啟動...這都需要去消耗我們非常多的資源的!

在HTTP1.1中默認(rèn)就使用持久化連接來解決:建立一次連接,多次請求均由這個連接完成!(如果阻塞了,還是會開新的TCP連接的)

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

相對于持久化連接還有另外比較重要的改動:

  • HTTP 1.1增加host字段
  • HTTP 1.1中引入了Chunked transfer-coding,范圍請求,實現(xiàn)斷點續(xù)傳(實際上就是利用HTTP消息頭使用分塊傳輸編碼,將實體主體分塊傳輸)
  • HTTP 1.1管線化(pipelining)理論,客戶端可以同時發(fā)出多個HTTP請求,而不用一個個等待響應(yīng)之后再請求
    •     注意:這個pipelining僅僅是限于理論場景下,大部分桌面瀏覽器仍然會選擇默認(rèn)關(guān)閉HTTP pipelining!
    •     所以現(xiàn)在使用HTTP1.1協(xié)議的應(yīng)用,都是有可能會開多個TCP連接的!

1.1.2 HTTP2基礎(chǔ)

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

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

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

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

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

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

HTTP Pipelining其實是把多個HTTP請求放到一個TCP連接中一一發(fā)送,而在發(fā)送過程中不需要等待服務(wù)器對前一個請求的響應(yīng);只不過,客戶端還是要按照發(fā)送請求的順序來接收響應(yīng)!

就像在超市收銀臺或者銀行柜臺排隊時一樣,你并不知道前面的顧客是干脆利索的還是會跟收銀員/柜員磨蹭到世界末日(不管怎么說,服務(wù)器(即收銀員/柜員)是要按照順序處理請求的,如果前一個請求非常耗時(顧客磨蹭),那么后續(xù)請求都會受到影響。

  • 在HTTP1.0中,發(fā)送一次請求時,需要等待服務(wù)端響應(yīng)了才可以繼續(xù)發(fā)送請求。
  • 在HTTP1.1中,發(fā)送一次請求時,不需要等待服務(wù)端響應(yīng)了就可以發(fā)送請求了,但是回送數(shù)據(jù)給客戶端的時候,客戶端還是需要按照響應(yīng)的順序來一一接收
  • 所以說,無論是HTTP1.0還是HTTP1.1提出了Pipelining理論,還是會出現(xiàn)阻塞的情況。從專業(yè)的名詞上說這種情況,叫做線頭阻塞(Head of line blocking)簡稱:HOLB

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

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

  • 多路復(fù)用意味著線頭阻塞將不在是一個問題,允許同時通過單一的 HTTP/2 連接發(fā)起多重的請求-響應(yīng)消息,合并多個請求為一個的優(yōu)化將不再適用。
    • (我們知道:HTTP1.1中的Pipelining是沒有付諸于實際的),之前為了減少HTTP請求,有很多操作將多個請求合并,比如:Spriting(多個圖片合成一個圖片),內(nèi)聯(lián)Inlining(將圖片的原始數(shù)據(jù)嵌入在CSS文件里面的URL里),拼接Concatenation(一個請求就將其下載完多個JS文件),分片Sharding(將請求分配到各個主機上)......

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

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

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

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

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

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

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

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

實際上運輸時:

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

HTTP2還有一些比較重要的改動:

  • 使用HPACK對HTTP/2頭部壓縮
  • 服務(wù)器推送
  • 流量控制
    • 針對傳輸中的流進行控制(TCP默認(rèn)的粒度是針對連接)
  • 流優(yōu)先級(Stream Priority)它被用來告訴對端哪個流更重要。

1.2 HTTP2總結(jié)

HTTP1.1新改動:

  • 持久連接
  • 請求管道化
  • 增加緩存處理(新的字段如cache-control)
  • 增加Host字段、支持?jǐn)帱c傳輸?shù)?/li>

HTTP2新改動:

  • 二進制分幀
  • 多路復(fù)用
  • 頭部壓縮
  • 服務(wù)器推送

1.3 HTTPS再次回顧

之前在面試的時候被問到了HTTPS,SSL這樣的知識點,也沒答上來,這里也簡單整理一下。

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

  • 對稱加密:
    • 加密和解密都是用同一個密鑰
  • 非對稱加密:
    • 加密用公開的密鑰,解密用私鑰
    •  (私鑰只有自己知道,公開的密鑰大家都知道)
  • 數(shù)字簽名:
    •  驗證傳輸?shù)膬?nèi)容是對方發(fā)送的數(shù)據(jù)
    • 發(fā)送的數(shù)據(jù)沒有被篡改過
  • 數(shù)字證書(Certificate Authority)簡稱CA
    • 認(rèn)證機構(gòu)證明是真實的服務(wù)器發(fā)送的數(shù)據(jù)。

3y的通訊之路:

  • 遠古時代:3y和女朋友聊天傳輸數(shù)據(jù)之間沒有任何的加密,直接傳輸
    • 內(nèi)容被看得一清二楚,毫無隱私可言
  • 上古時期:使用對稱加密的方式來保證傳輸?shù)臄?shù)據(jù)只有兩個人知道
    • 此時有個問題:密鑰不能通過網(wǎng)絡(luò)傳輸(因為沒有加密之前,都是不安全的),所以3y和女朋友先約見面一次,告訴對方密碼是多少,再對話聊天。
  • 中古時期:3y不單單要跟女朋友聊天,還要跟爸媽聊天的哇(同樣不想泄漏了自己的通訊信息)。那有那么多人,難道每一次都要約來見面一次嗎?(說明維護多個對稱密鑰是麻煩的!)--->所以用到了非對稱加密
    • 3y自己保留一份密碼,獨一無二的(私鑰)。告訴3y女朋友,爸媽一份密碼(這份密碼是公開的,誰都可以拿--->公鑰)。讓他們給我發(fā)消息之前,先用那份我告訴他們的密碼加密一下,再發(fā)送給我。我收到信息之后,用自己獨一無二的私鑰解密就可以了!
  • 近代:此時又出現(xiàn)一個問題:雖然別人不知道私鑰是什么,拿不到你原始傳輸?shù)臄?shù)據(jù),但是可以拿到加密后的數(shù)據(jù),他們可以改掉某部分的數(shù)據(jù)再發(fā)送給服務(wù)器,這樣服務(wù)器拿到的數(shù)據(jù)就不是完整的了。
    • 3y女朋友給3y發(fā)了一條信息”3y我喜歡你“,然后用3y給的公鑰加密,發(fā)給3y了。此時不懷好意的人截取到這條加密的信息,他破解不了原信息。但是他可以修改加密后的數(shù)據(jù)再傳給3y?赡3y拿到收到的數(shù)據(jù)就是”3y你今晚跪鍵盤吧“
  • 現(xiàn)代:拿到的數(shù)據(jù)可能被篡改了,我們可以使用數(shù)字簽名來解決被篡改的問題。數(shù)字簽名其實也可以看做是非對稱加密的手段一種,具體是這樣的:得到原信息hash值,用私鑰對hash值加密,另一端用公鑰解密,最后比對hash值是否變了。如果變了就說明被篡改了。(一端用私鑰加密,另一端用公鑰解密,也確保了來源)
  • 目前現(xiàn)在:好像使用了數(shù)字簽名就萬無一失了,其實還有問題。我們使用非對稱加密的時候,是使用公鑰進行加密的。如果公鑰被偽造了,后面的數(shù)字簽名其實就毫無意義了。講到底:還是可能會被中間人攻擊~此時我們就有了CA認(rèn)證機構(gòu)來確認(rèn)公鑰的真實性!

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

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

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

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

過程是這樣子的:

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

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

 

  • 用戶向web服務(wù)器發(fā)起一個安全連接的請求
  • 服務(wù)器返回經(jīng)過CA認(rèn)證的數(shù)字證書,證書里面包含了服務(wù)器的public key(公鑰)
  • 用戶拿到數(shù)字證書,用自己瀏覽器內(nèi)置的CA證書解密得到服務(wù)器的public key
  • 用戶用服務(wù)器的public key加密一個用于接下來的對稱加密算法的密鑰,傳給web服務(wù)器
    • 因為只有服務(wù)器有private key可以解密,所以不用擔(dān)心中間人攔截這個加密的密鑰

  服務(wù)器拿到這個加密的密鑰,解密獲取密鑰,再使用對稱加密算法,和用戶完成接下來的網(wǎng)絡(luò)通信

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

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

  (1) 所有信息都是加密傳播,黑客無法竊聽。

  (2) 具有校驗機制,一旦被篡改,通信雙方會立刻發(fā)現(xiàn)。

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

二、總結(jié)

我只是在學(xué)習(xí)的過程中,把自己遇到的問題寫出來,整理出來,希望可以對大家有幫助。如果文章有錯的地方,希望大家可以在評論區(qū)指正,一起學(xué)習(xí)交流~

西部數(shù)碼SSL證書服務(wù):

SSL證書服務(wù)

詳情請戳:http://bingfeng168.cn/2018/ssl.asp

西部數(shù)碼提供SSL證書服務(wù),價格低至299/年;西部數(shù)碼為活動期間購買的用戶提供免費安裝ssl證書的技術(shù)支持服務(wù),免費定制安全解決方案,讓數(shù)據(jù)更安全!有任何問題可隨時咨詢在線客服!

標(biāo)簽: https http http2

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請與原作者聯(lián)系。

上一篇:蘋果iOS APP配置HTTPS,iOS ATS安裝配置SSL證書

下一篇:谷歌瀏覽器決定調(diào)整 HTTPS 安全標(biāo)記背后的安全邏輯