古詩詞大全網 - 個性簽名 - HTTP基本概念

HTTP基本概念

HTTP是Hyper Text Transfer Protocol(超文本傳輸協議)的縮寫。它是壹個應用層協議,由請求和響應構成,是壹個標準的客戶端服務器模型。HTTP是壹個無狀態的協議。

先引入副作用和冪等的概念。 副作用指對服務器上的資源做改變,搜索是無副作用的,註冊是副作用的。 冪等指發送 M 和 N 次請求(兩者不相同且都大於 1),服務器上資源的狀態壹致,比如註冊 10 個和 11 個帳號是不冪等的,對文章進行更改 10 次和 11 次是冪等的。 在規範的應用場景上說,Get 多用於無副作用,冪等的場景,例如搜索關鍵字。Post 多用於副作用,不冪等的場景,例如註冊。

表示請求已接收,繼續處理

HTTP協議采用“請求-應答”模式,並且HTTP是基於TCP進行連接的。普通模式(非keep-alive)時,每個請求或應答都需要建立壹個連接,完成之後立即斷開。

當使用 Conection: keep-alive 模式(又稱持久連接、連接重用)時,keep-alive使客戶端道服務器端連接持續有效,即不關閉底層的TCP連接,當出現對服務器的後繼請求時,keep-alive功能避免重新建立連接。

[圖片上傳失敗...(image-e0197e-1569467184701)]

管線化後,請求和響應不再是依次交替的了。他可以支持壹次性發送多個請求,並壹次性接收多個響應。

在客戶端向服務端發送請求的時候,客戶端會申明可以接受的數據格式和數據相關的壹些限制是什麽樣的;服務端在接受到這個請求時他會根據這個信息進行判斷到底返回怎樣的數據。

CSP Content-Security-Policy

例子:

HTTP 2.0 相比於 HTTP 1.X,可以說是大幅度提高了 web 的性能。

HTTP2采用 二進制格式傳輸 ,取代了HTTP1.x的文本格式,二進制格式解析更高效。 多路復用 代替了HTTP1.x的序列和阻塞機制,所有的相同域名請求都通過同壹個TCP連接並發完成。

HTTP 2.0 中所有加強性能的核心點在於此。在之前的 HTTP 版本中,我們是通過文本的方式傳輸數據。在 HTTP 2.0 中引入了新的編碼機制,所有傳輸的數據都會被分割,並采用二進制格式編碼。

HTTP1.x中,並發多個請求需要多個TCP連接,瀏覽器為了控制資源會有6-8個TCP連接都限制。 HTTP2中

在 HTTP 2.0 中,有兩個非常重要的概念,分別是幀(frame)和流(stream)。

幀代表著最小的數據單位,每個幀會標識出該幀屬於哪個流,流也就是多個幀組成的數據流。

多路復用,就是在壹個 TCP 連接中可以存在多條流。 換句話說,也就是可以發送多個請求,對端可以通過幀中的標識知道屬於哪個請求。通過這個技術,可以避免 HTTP 舊版本中的隊頭阻塞問題,極大的提高傳輸性能。

[圖片上傳失敗...(image-f4755d-1569467184697)]

在 HTTP 1.X 中,我們使用文本的形式傳輸 header,在 header 攜帶 cookie 的情況下,可能每次都需要重復傳輸幾百到幾千的字節。

在 HTTP 2.0 中,使用了 HPACK 壓縮格式對傳輸的 header 進行編碼,減少了 header 的大小。並在兩端維護了索引表,用於記錄出現過的 header ,後面在傳輸過程中就可以傳輸已經記錄過的 header 的鍵名,對端收到數據後就可以通過鍵名找到對應的值。

在 HTTP 2.0 中,服務端可以在客戶端某個請求後,主動推送其他資源。

可以想象以下情況,某些資源客戶端是壹定會請求的,這時就可以采取服務端 push 的技術,提前給客戶端推送必要的資源,這樣就可以相對減少壹點延遲時間。當然在瀏覽器兼容的情況下妳也可以使用 prefetch。

這個過程比較復雜,首先要了解兩個概念。對稱加密和非對稱加密

對稱加密即通信雙方使用同壹個密鑰進行加解密,對稱加密雖然簡單性能也好,但是無法解決首次將密鑰發給對方的安全問題,容易被黑客攔截。

非對稱加密安全性更高,但帶來的問題就是速度慢,影響性能

HTTPS則結合兩種解密方式,將對稱加密的密鑰用非對稱的公鑰加密發給對方,對方再用私鑰解密得到對稱加密的密鑰。之後雙杠就可以通過對稱加密來通信

此時又帶來了新的問題,中間人問題。

如果此時客戶端和服務器之間存在壹個中間人,這個中間人只要將雙方通信的公鑰換成自己的,就可以輕松解密通信雙方的所有數據

這個時候就要有個安全的第三方頒發證書(CA),證明中間人的身份。這個證書包含:

但是這也不夠安全,萬壹中間人篡改了證書,那這個身份證明就白給了。於是有了個新技術, 數字簽名

數字簽名就是用CA自帶的hash算法對證書內容進行HASH得到壹個摘要,再將這個摘要采用CA的私鑰加密,最終組成數字簽名

當別人把它的證書發過來,我用同樣的hash算法,再次生成消息摘要,然後用CA公鑰對數字簽名進行解密,得到CA創建的消息摘要,兩者壹比就知道中間人有沒有被人篡改了

這個時候就能最大程度保證通信的安全