鑑於 http1.0 已經基本被淘汰了,我也沒有過多地關注1.0 的內容,而是從 http1.1 學起,這裡只是乙個知識點的梳理
在以前的文章中提到,瀏覽器 是有專門的 網路程序的
在 http1.1 中,同一時間對於 同乙個網域名稱 只會保留 6 個 tcp 連線
在 請求中包含 keep-alive(瀏覽器預設給每個請求都加上了這個配置) 的前提下,請求會復用 之前的 tcp 連線
如果 不想 復用,可以再 請求頭上 加上 connection: close
在 http1.1 中,提供了 對虛擬主機的支援,也就是 在同乙個 ip 下,還可以有不同的 主機,主要是 通過 host 的請求頭配置
通過 chunk 機制來 動態地傳輸 要傳送的內容,將 資料進行分割,攜帶上 每個資料塊 的長度,在最後 發乙個 長度為 0 的資料塊 表示 傳送結束
同時 還有 cookie、cache-control 等 新式的 請求頭引數
但是 http1.1 還是有不少缺陷的
tcp 啟動太慢了,三次握手
tcp 負責的請求還是太少了,如果前面的請求太慢,後面的請求就會一直等待
很多 國外的**都是使用了 http2,那麼為什麼要強調國外呢?
http2.0 最重要的 改進 在於 傳輸 的內容 都是 二進位制位元組流,而很多 的新特性 也是得益於 這個而發展出來的
多路復用,所謂多路復用,就是 這裡 不再維持 6 個tcp 了,而是 對於乙個 網域名稱 維持 乙個 tcp 連線
在傳輸的過程中,給每個資料塊 加乙個 對應 請求 的id,系統就可以根據 id 拼出來 想要的 返回結果
而在使用 多路復用 的前提下,就減少了 tcp 的連線,也減少了 三次握手的過程,自然也加快了速度
可以 設定請求的 優先順序,比如 乙個 網頁中,js、css 的優先順序 比較高,可以在多路復用的傳輸過程中,可以優先傳輸 這一類的檔案
http2.0 是可以實現 伺服器推送的,那麼 在 使用者請求 乙個html 之後,伺服器可以主動把 js、css檔案推過來,減少了 主動請求的過程,這樣的話 使用者體驗自然更好
http2.0 實現了 頭部壓縮,這個 沒什麼好多說的
對於 http/2 來說,乙個網域名稱使用乙個 tcp 連線才能夠獲得最佳效能,如果開多個網域名稱,就會浪費頻寬和伺服器資源,也會降低 http/2 的效率,所以「網域名稱收縮」在 http/2 裡是必須要做的。http2.0 自然也是有缺陷的
在 tcp 連線中,由於 需要確保 請求傳送出去了,那麼 就會對 傳送出的 包進行檢驗,如果發生了丟包的事情,就會 重新傳送。
而在這個重新傳送的過程中,所有的 請求都會停止,等待 這個丟掉的包成功傳送
關於這個協議,我了解的也不多
這個協議是在 udp 的基礎上,重新實現的 quic 協議
整合了 tls 加密的功能(https)
由於 基於 udp ,就可以 握一次手,乃至於不握手了
https 是在 http 協議和 tcp 協議之間,加上了 一層ssl/tls 加密、解密的過程
先是進行了 tcp 的三次握手
現在 的 https 是對稱加密(雙方 握有相同的秘鑰) 和 非對稱加密(客戶端握有 公鑰,服務端握有 私鑰) 的配合使用
瀏覽器 生成 乙個 client-random 隨機數 傳送給 服務端(這裡還會帶上 可以使用的 加密演算法列表)①
服務端 儲存 client-random ,然後生成 乙個 service-random 隨機數,和 自己的數字證書 傳送到 客戶端(這裡會 選擇 第3點帶上的 加密演算法列表中的乙個 返回給客戶端 )②
數字 證書有 明文部分,有 密文部分,明文部分 是使用hash 加密的,而 密文部分 是 ca 機構 使用自己的私鑰 加密的
客戶端 接收到 數字證書之後,使用 系統 內嵌 的 證書公鑰 解密 證書,獲得摘要資訊(這裡還包括伺服器 傳送的 公鑰資訊),驗證 服務端 的網域名稱資訊等相關資訊(也就是 明文 部分 和密文 部分一致),知道了這個服務端 確實是 我的服務端
客戶端再生成pre-random 隨機數,利用 第6點 中提到的 公鑰資訊 進行加密後,傳送給 服務端 ③
服務端 使用 私鑰 解密,這樣 客戶端 和 服務端 就都儲存了 三分隨機數,client-random service-rendom pre-random ,用 約定好的 加密演算法 (就是 第 3、4 點 客戶端、服務端 選擇的 加密演算法) 計算出 相等的 對稱加密 的秘鑰
這樣 就可以使用 生成 秘鑰 進行加密資料 通訊了
所以 加上 tcp 的三次握手,https 一共經歷了6 次握手 才能夠共享 乙個金鑰
http知識總結
schema host port path url params query string anchor 結構 含義scheme 指定低層使用的協議 例如 http,https,ftp host http伺服器的ip位址或者網域名稱 port http伺服器的預設埠是80,這種情況下埠號可以省略。如...
HTTP協議知識總結
http協議指的是超文字傳輸協議,其建立在運輸層tcp協議的基礎上,利用網際網路來進行傳輸超文字的乙個應用層協議。http與https均屬於應用層協議,其中https協議經過了tls和ssl加密,他們的不同點是 1.https協議傳送的內容是經過加密後的內容,而http傳送的是明文 2.https使...
HTTP網路知識總結
1.http基本介紹 http協議 是種超文字傳輸協議 請求 響應協議 它是建立在tcp上無狀態單向鏈結協議 屬於tcp ip協議族中一員 它規定客戶端傳送什麼樣的資料給伺服器端 http請求 並且伺服器端需要返回什麼樣的資料 http響應 注意乙個完整的http請求 響應,並不只是通過http協議...