013 HTTP篇

3.1 HTTP常見面試題

1、HTTP基本概念:

  • 超文本傳輸協議:在計算機世界里專門在「兩點」之間「傳輸」文字、圖片、音頻、視頻等「超文本」數據的「約定和規范」
  • HTTP常見的狀態碼 [[Pasted image 20250705140705.png]]
  • HTTP常見字段
    • Host 字段:客戶端發送請求時,用來指定服務器的域名
    • Content-Length 字段:服務器在返回數據時本次回應的數據長度。HTTP協議通過設置回車符、換行符作為HTTP header的邊界,通過Content-Length字段作為HTTP body的邊界,這兩個方式都是為了解決“粘包”的問題。
    • Connection 字段:常用于客戶端要求服務器使用「HTTP 長連接」機制,以便其他請求復用
    • Content-Type 字段:用于服務器回應時,告訴客戶端,本次數據是什么格式。(客戶端請求的時候,可以使用 Accept 字段聲明自己可以接受哪些數據格式。)
    • Content-Encoding 字段:說明數據的壓縮方法。表示服務器返回的數據使用了什么壓縮格式(客戶端在請求時,用 Accept-Encoding 字段說明自己可以接受哪些壓縮方法)
      2、GET 與 POST
  • GET 的語義是從服務器獲取指定的資源,比如打開瀏覽器文章,瀏覽器就會發送 GET 請求給服務器,服務器就會返回文章的所有文字及資源。GET 請求的參數位置一般是寫在 URL 中[[Pasted image 20250705143554.png]]
  • POST 的語義是根據請求負荷(報文body)對指定的資源做出處理,在文章底部留言后點擊「提交」,瀏覽器就會執行一次POST請求,把你的留言文字放進了報文body里,然后拼接好POST請求頭,通過TCP協議發送給服務器。POST 請求攜帶數據的位置一般是寫在報文 body 中[[Pasted image 20250705143636.png]]
  • GET 和 POST 請求都是明文的,避免被竊取就要用HTTPS協議 [[Pasted image 20250705144047.png]]
    3、HTTP緩存技術
  • 強制緩存:只要瀏覽器判斷緩存沒有過期,則直接使用瀏覽器的本地緩存,決定是否使用緩存的主動性在于瀏覽器這邊。強緩存是利用下面這兩個 HTTP 響應頭部(Response Header)字段Cache-Control和Expires實現[[Pasted image 20250705144933.png]]
  • 協商緩存:當我們在瀏覽器使用開發者工具的時候,你可能會看到過某些請求的響應碼是304,這個是告訴瀏覽器可以使用本地緩存的資源,通常這種通過服務端告知客戶端是否可以使用緩存的方式被稱為協商緩存。Etag實現協商緩存的過程:[[Pasted image 20250705150930.png]]
    4、HTTP特性
  • HTTP/1.1 優點「簡單、靈活和易于擴展、應用廣泛和跨平臺」
    • 1. 簡單
    • 2. 靈活和易于擴展
        • HTTPS 就是在 HTTP 與 TCP 層之間增加了 SSL/TLS 安全傳輸層;
        • HTTPS 就是在 HTTP 與 TCP 層之間增加了 SSL/TLS 安全傳輸層;
    • 3. 應用廣泛和跨平臺
  • HTTP/1.1 缺點「無狀態、明文傳輸」,同時還有一大缺點「不安全」
    • 1. 無狀態雙刃劍:不需要額外記錄狀態信息,減輕服務器負擔,但服務器沒有記憶能力,它在完成有關聯性的操作時會非常麻煩。例如登錄->添加購物車->下單->結算->支付,這系列操作都要知道用戶的身份才行
    • 2. 明文傳輸雙刃劍:抓包調試方便,但信息裸奔
    • 3. 不安全:明文不加密,不驗證通信方身份,無法證明報文完整性(可能被篡改)。可用HTTPS解決,加入SSL/TLS層
  • HTTP/1.1 性能
    • 1. 長連接:減少TCP重復建立和斷開的額外開銷
    • 2. 管道網絡傳輸:長連接使得管道傳輸成為可能,即可在同一個TCP連接里面,客戶端可以發起多個請求,只要第一個請求發出去了,不必等其回來,就可以發第二個請求出去,可以減少整體的響應時間。
    • 3. 隊頭阻塞:順序發送的請求序列中的一個請求因為某種原因被阻塞時,在后面排隊的所有請求也一同被阻塞了
      5、HTTP 與 HTTPS
  • HTTP是超文本傳輸協議,信息是明文傳輸,存在安全風險的問題。HTTPS則解決HTTP不安全的缺陷,在TCP和HTTP網絡層之間加入了SSL/TLS安全協議,使得報文能夠加密傳輸。
  • 如何解決HTTP的缺點
    • 1. 混合加密:采用的是對稱加密非對稱加密結合的「混合加密」方式,解決明文竊聽問題。
      • 在通信建立前采用非對稱加密的方式交換「會話秘鑰」
      • 在通信過程中全部使用對稱加密的「會話秘鑰」的方式加密明文數據
    • 2. 摘要算法 + 數字簽名:解決內容篡改
      • 用摘要算法(哈希函數)來計算出內容的哈希值
      • 非對稱加密算法(數字前面算法):通過「私鑰加密,公鑰解密」的方式,來確認消息的身份[[Pasted image 20250705161048.png]]
    • 3. 數字證書:將服務器公鑰放在數字證書(由數字證書認證機構頒發)中,實現身份驗證環節
  • HTTPS 是如何建立連接的(這部分不太懂)
    • TLS 協議建立的詳細流程
    • 客戶端校驗數字證書的流程
  • HTTPS的應用數據是如何保證完整性的(這部分不太懂)
    • TLS 記錄協議負責保護應用程序數據并驗證其完整性和來源
  • HTTPS 一定安全可靠嗎
    6、HTTP/1.1、HTTP/2、HTTP/3 演變 [[Pasted image 20250705172849.png]]
  • HTTP/1.1 相比 HTTP/1.0 提高了什么性能?
      • 使用長連接的方式改善了 HTTP/1.0 短連接造成的性能開銷。
    • 支持管道(pipeline)網絡傳輸,只要第一個請求發出去了,不必等其回來
  • HTTP/2 做了什么優化?
    • HTTP/2 協議是基于 HTTPS 的,所以 HTTP/2 的安全性也是有保障的。
    • 1. 頭部壓縮HPACK 算法,在客戶端和服務器同時維護一張頭信息表,所有字段都會存入這個表
    • 2. 二進制格式:不再像 HTTP/1.1 里的純文本形式的報文,而是全面采用了二進制格式
    • 3. 并發傳輸:引出了 Stream 概念,多個 Stream 復用在一條 TCP 連接
    • 4. 服務器推送:服務端不再是被動地響應,可以主動向客戶端發送消息
  • HTTP/3 做了哪些優化?
    • HTTP/2 雖然通過多個請求復用一個 TCP 連接解決了 HTTP 的隊頭阻塞 ,但是一旦發生丟包,就會阻塞住所有的 HTTP 請求,這屬于 TCP 層隊頭阻塞。HTTP/2 隊頭阻塞的問題是因為 TCP,所以 HTTP/3 把 HTTP 下層的 TCP 協議改成了 UDP!
    • 基于 UDP 的 QUIC 協議 可以實現類似 TCP 的可靠性傳輸。QUIC 有以下 3 個特點。
      • 1、無隊頭阻塞當某個流發生丟包時,只會阻塞這個流,其他流不會受到影響
      • 2、更快的連接建立:QUIC 內部包含了 TLS
      • 3、連接遷移: QUIC 協議沒有用四元組的方式來“綁定”連接,而是通過連接 ID 來標記通信的兩個端點
3.2 HTTP/1.1 如何優化

1、下面這三種優化思路來優化 HTTP/1.1 協議:

  • 盡量避免發送HTTP請求;
  • 在需要發送HTTP請求時,考慮如何減少請求次數;
  • 減少服務器的HTTP響應的數據大小;
    2、盡量避免發送HTTP請求:緩存技術 [[Pasted image 20250706112045.png]] [[Pasted image 20250705150930.png]]
    3、考慮如何減少請求次數
  • 減少重定向請求次數:重定向的工作交由代理服務器完成,就能減少 HTTP 請求次數了
  • 合并請求:把多個訪問小文件的請求合并成一個大的請求,減少了重復發送的 HTTP 頭部。
  • 延遲發送請求:通過「按需獲取」的方式,來減少第一時間的 HTTP 請求次數
    4、減少服務器的HTTP響應的數據大小
  • 無損壓縮:資源經過壓縮后,信息不被破壞,還能完全恢復到壓縮前的原樣,適合用在文本文件、程序可執行文件、程序源代碼。(對原始資源建立統計模型,利用這個統計模型,將常出現的數據用較短的二進制比特序列表示,將不常出現的數據用較長的二進制比特序列表示)客戶端支持的壓縮算法,會在 HTTP 請求中通過頭部中的 Accept-Encoding 字段
  • 有損壓縮:解壓的數據會與原始數據不同但是非常接近。HTTP 請求頭部中的 Accept 字段里的「 q 質量因子」,告訴服務器期望的資源質量。
3.3 HTTPS RSA握手解析

1、HTTPS 在 HTTP 與 TCP 層之間加入了 TLS 協議,來解決上述的風險。[[Pasted image 20250706133549.png]]
2、TLS 握手過程,不同的密鑰交換算法,TLS 的握手過程可能會有一些區別。密鑰交換算法,因為考慮到性能的問題,所以雙方在加密應用信息時使用的是對稱加密密鑰,而對稱加密密鑰是不能被泄漏的,為了保證對稱加密密鑰的安全性,所以使用非對稱加密的方式來保護對稱加密密鑰的協商,這個工作就是密鑰交換算法負責的。(最簡單的 RSA 密鑰交換算法)

  • 經過「四個消息」就可以完成 TLS 握手,也就是需要 2個 RTT 的時延RTT(Round-Trip Time)時延是指數據從發送端到接收端并返回發送端所需的總時間,即一次完整的“往返”通信延遲)
    3、RSA 握手過程
  • 在RSA密鑰協商算法中,客戶端會生成隨機密鑰,并使用服務端的公鑰加密后再傳給服務端。根據非對
    稱加密算法,公鑰加密的消息僅能通過私鑰解密,這樣服務端解密后,雙方就得到了相同的密鑰(服務端就得到客戶端生成的隨機秘鑰),再用它加密應用消息。
  • 使用RSA密鑰協商算法的最大問題是不支持前向保密。因為客戶端傳遞隨機數(用于生成對稱加密密鑰的條件之一)給服務端時使用的是公鑰加密的,服務端收到后,會用私鑰解密得到隨機數。所以一旦服務端的私鑰泄漏了,過去被第三方截獲的所有TLS通訊密文都會被破解。為了解決這個問題,后面就出現了 ECDHE 密鑰協商算法
3.4 HTTPS ECDHE 握手解析

1、HTTPS 常用的密鑰交換算法有兩種,分別是 RSA 和 ECDHE 算法。ECDHE秘鑰交換算法[[Pasted image 20250706153243.png]]

3.5 HTTPS 如何優化
3.6 HTTP/2 牛逼在哪?

1、HTTP/2 出來的目的是為了改善 HTTP 的性能

  • 兼容 HTTP/ 1.1
  • HPACK 算法壓縮頭部:客戶端和服務器兩端都會建立和維護「字典」,用長度較小的索引號表示重復的字符串,再用 Huffman 編碼壓縮數據,可達到 50%~90% 的高壓縮率
  • 二進制幀:將 HTTP/1 的文本格式改成二進制格式傳輸數據,極大提高了 HTTP 傳輸效率
  • 并發傳輸:HTTP/2 通過 Stream 實現的并發
  • 服務器主動推送資源
3.7 HTTP/3 強勢來襲

1、HTTP/2 的缺點

  • 隊頭阻塞:當 TCP 丟包時,整個 TCP 都要等待重傳
  • TCP 與 TLS 的握手時延遲:發起 HTTP 請求時,需要經過 TCP 三次握手和 TLS 四次握手
  • 網絡遷移需要重新連接:IP 地址或者端口變動了,就會導致需要 TCP 與 TLS 重新握手(比如 4G 網絡環境切換成 WiFi)
    2、HTTP/3 QUIC協議:將傳輸協議替換成了 UDP,還基于 UDP 協議在「應用層」實現了 QUIC 協議[[Pasted image 20250706191606.png]]
  • 無隊頭阻塞
  • 更快的連接建立
  • 連接遷移
3.8 HTTP 和 RPC 的區別

1、服務發現:在 HTTP 中,你知道服務的域名,就可以通過 DNS 服務去解析得到它背后的 IP 地址;而 RPC 的話,就有些區別,一般會有專門的中間服務去保存服務名和IP信息
2、底層連接形式:RPC 協議一般還會再建個連接池
3、傳輸的內容。

  • 將結構體轉為二進制數組的過程就叫序列化,反過來將二進制數組復原成結構體的過程叫反序列化

RPCRemote Procedure Call),又叫做遠程過程調用。它本身并不是一個具體的協議,而是一種調用方式。如果現在這不是個本地方法,而是個遠端服務器暴露出來的一個方法 remoteFunc,如果我們還能像調用本地方法那樣去調用它,這樣就可以屏蔽掉一些網絡細節

HTTP 和 WebSocker

1、HTTP協議設計之初,考慮的是看看網頁文本的場景,能做到客戶端發起請求再由服務器響應就夠了,根本就沒考慮網頁游戲這種,客戶端和服務器之間都要互相主動發大量數據的場景。所以,為了更好的支持這樣的場景,我們需要另外一個基于TCP的新協議,新的應用層協議WebSocket就被設計出來了。
2、瀏覽器在 TCP 三次握手建立連接之后,都統一使用 HTTP 協議先進行一次通信。

  • 如果這時候是想建立 WebSocket 連接,就會在 HTTP 請求里帶上一些特殊的header 頭 [[Pasted image 20250706201759.png]]
    3、WebSocker的消息格式 [[QQ_1751804965426.png]]
  • 數據包在WebSocket中被叫做
  • 適用于需要服務器和客戶端(瀏覽器)頻繁交互的大部分場景,比如網頁/小程序游戲,網頁聊天室,以及一些類似飛書這樣的網頁協同辦公軟件

我們知道TCP連接的兩端,同一時間里,雙方都可以主動向對方發送數據。這就是所謂的全雙工。而現在使用最廣泛的HTTP/1.1,也是基于TCP協議的,同一時間里,客戶端和服務器只能有一方主動發數據,這就是所謂的半雙工。[[Pasted image 20250706203228.png]]

3.1 HTTP常見面試題

1、HTTP基本概念:

  • 超文本傳輸協議:在計算機世界里專門在「兩點」之間「傳輸」文字、圖片、音頻、視頻等「超文本」數據的「約定和規范」
  • HTTP常見的狀態碼 [[Pasted image 20250705140705.png]]
  • HTTP常見字段
    • Host?字段:客戶端發送請求時,用來指定服務器的域名
    • Content-Length 字段:服務器在返回數據時本次回應的數據長度。HTTP協議通過設置回車符、換行符作為HTTP header的邊界,通過Content-Length字段作為HTTP body的邊界,這兩個方式都是為了解決“粘包”的問題。
    • Connection 字段:常用于客戶端要求服務器使用「HTTP 長連接」機制,以便其他請求復用
    • Content-Type 字段:用于服務器回應時,告訴客戶端,本次數據是什么格式。(客戶端請求的時候,可以使用?Accept?字段聲明自己可以接受哪些數據格式。)
    • Content-Encoding 字段:說明數據的壓縮方法。表示服務器返回的數據使用了什么壓縮格式(客戶端在請求時,用?Accept-Encoding?字段說明自己可以接受哪些壓縮方法)
      2、GET 與 POST
  • GET 的語義是從服務器獲取指定的資源,比如打開瀏覽器文章,瀏覽器就會發送 GET 請求給服務器,服務器就會返回文章的所有文字及資源。GET 請求的參數位置一般是寫在 URL 中[[Pasted image 20250705143554.png]]
  • POST 的語義是根據請求負荷(報文body)對指定的資源做出處理,在文章底部留言后點擊「提交」,瀏覽器就會執行一次POST請求,把你的留言文字放進了報文body里,然后拼接好POST請求頭,通過TCP協議發送給服務器。POST 請求攜帶數據的位置一般是寫在報文 body 中[[Pasted image 20250705143636.png]]
  • GET 和 POST 請求都是明文的,避免被竊取就要用HTTPS協議 [[Pasted image 20250705144047.png]]
    3、HTTP緩存技術
  • 強制緩存:只要瀏覽器判斷緩存沒有過期,則直接使用瀏覽器的本地緩存,決定是否使用緩存的主動性在于瀏覽器這邊。強緩存是利用下面這兩個 HTTP 響應頭部(Response Header)字段Cache-Control和Expires實現[[Pasted image 20250705144933.png]]
  • 協商緩存:當我們在瀏覽器使用開發者工具的時候,你可能會看到過某些請求的響應碼是304,這個是告訴瀏覽器可以使用本地緩存的資源,通常這種通過服務端告知客戶端是否可以使用緩存的方式被稱為協商緩存。Etag實現協商緩存的過程:[[Pasted image 20250705150930.png]]
    4、HTTP特性
  • HTTP/1.1 優點「簡單、靈活和易于擴展、應用廣泛和跨平臺」
    • 1. 簡單
    • 2. 靈活和易于擴展
        • HTTPS 就是在 HTTP 與 TCP 層之間增加了 SSL/TLS 安全傳輸層;
        • HTTPS 就是在 HTTP 與 TCP 層之間增加了 SSL/TLS 安全傳輸層;
    • 3. 應用廣泛和跨平臺
  • HTTP/1.1 缺點「無狀態、明文傳輸」,同時還有一大缺點「不安全」
    • 1. 無狀態雙刃劍:不需要額外記錄狀態信息,減輕服務器負擔,但服務器沒有記憶能力,它在完成有關聯性的操作時會非常麻煩。例如登錄->添加購物車->下單->結算->支付,這系列操作都要知道用戶的身份才行
    • 2. 明文傳輸雙刃劍:抓包調試方便,但信息裸奔
    • 3. 不安全:明文不加密,不驗證通信方身份,無法證明報文完整性(可能被篡改)。可用HTTPS解決,加入SSL/TLS層
  • HTTP/1.1 性能
    • 1. 長連接:減少TCP重復建立和斷開的額外開銷
    • 2. 管道網絡傳輸:長連接使得管道傳輸成為可能,即可在同一個TCP連接里面,客戶端可以發起多個請求,只要第一個請求發出去了,不必等其回來,就可以發第二個請求出去,可以減少整體的響應時間。
    • 3. 隊頭阻塞:順序發送的請求序列中的一個請求因為某種原因被阻塞時,在后面排隊的所有請求也一同被阻塞了
      5、HTTP 與 HTTPS
  • HTTP是超文本傳輸協議,信息是明文傳輸,存在安全風險的問題。HTTPS則解決HTTP不安全的缺陷,在TCP和HTTP網絡層之間加入了SSL/TLS安全協議,使得報文能夠加密傳輸。
  • 如何解決HTTP的缺點
    • 1. 混合加密:采用的是對稱加密非對稱加密結合的「混合加密」方式,解決明文竊聽問題。
      • 在通信建立前采用非對稱加密的方式交換「會話秘鑰」
      • 在通信過程中全部使用對稱加密的「會話秘鑰」的方式加密明文數據
    • 2. 摘要算法 + 數字簽名:解決內容篡改
      • 用摘要算法(哈希函數)來計算出內容的哈希值
      • 非對稱加密算法(數字前面算法):通過「私鑰加密,公鑰解密」的方式,來確認消息的身份[[Pasted image 20250705161048.png]]
    • 3. 數字證書:將服務器公鑰放在數字證書(由數字證書認證機構頒發)中,實現身份驗證環節
  • HTTPS 是如何建立連接的(這部分不太懂)
    • TLS 協議建立的詳細流程
    • 客戶端校驗數字證書的流程
  • HTTPS的應用數據是如何保證完整性的(這部分不太懂)
    • TLS 記錄協議負責保護應用程序數據并驗證其完整性和來源
  • HTTPS 一定安全可靠嗎
    6、HTTP/1.1、HTTP/2、HTTP/3 演變 [[Pasted image 20250705172849.png]]
  • HTTP/1.1 相比 HTTP/1.0 提高了什么性能?
      • 使用長連接的方式改善了 HTTP/1.0 短連接造成的性能開銷。
    • 支持管道(pipeline)網絡傳輸,只要第一個請求發出去了,不必等其回來
  • HTTP/2 做了什么優化?
    • HTTP/2 協議是基于 HTTPS 的,所以 HTTP/2 的安全性也是有保障的。
    • 1. 頭部壓縮HPACK?算法,在客戶端和服務器同時維護一張頭信息表,所有字段都會存入這個表
    • 2. 二進制格式:不再像 HTTP/1.1 里的純文本形式的報文,而是全面采用了二進制格式
    • 3. 并發傳輸:引出了 Stream 概念,多個 Stream 復用在一條 TCP 連接
    • 4. 服務器推送:服務端不再是被動地響應,可以主動向客戶端發送消息
  • HTTP/3 做了哪些優化?
    • HTTP/2 雖然通過多個請求復用一個 TCP 連接解決了 HTTP 的隊頭阻塞 ,但是一旦發生丟包,就會阻塞住所有的 HTTP 請求,這屬于 TCP 層隊頭阻塞。HTTP/2 隊頭阻塞的問題是因為 TCP,所以?HTTP/3 把 HTTP 下層的 TCP 協議改成了 UDP!
    • 基于 UDP 的?QUIC 協議?可以實現類似 TCP 的可靠性傳輸。QUIC 有以下 3 個特點。
      • 1、無隊頭阻塞當某個流發生丟包時,只會阻塞這個流,其他流不會受到影響
      • 2、更快的連接建立:QUIC 內部包含了 TLS
      • 3、連接遷移:?QUIC 協議沒有用四元組的方式來“綁定”連接,而是通過連接 ID?來標記通信的兩個端點
3.2 HTTP/1.1 如何優化

1、下面這三種優化思路來優化 HTTP/1.1 協議:

  • 盡量避免發送HTTP請求;
  • 在需要發送HTTP請求時,考慮如何減少請求次數;
  • 減少服務器的HTTP響應的數據大小;
    2、盡量避免發送HTTP請求:緩存技術 [[Pasted image 20250706112045.png]] [[Pasted image 20250705150930.png]]
    3、考慮如何減少請求次數
  • 減少重定向請求次數:重定向的工作交由代理服務器完成,就能減少 HTTP 請求次數了
  • 合并請求:把多個訪問小文件的請求合并成一個大的請求,減少了重復發送的 HTTP 頭部。
  • 延遲發送請求:通過「按需獲取」的方式,來減少第一時間的 HTTP 請求次數
    4、減少服務器的HTTP響應的數據大小
  • 無損壓縮:資源經過壓縮后,信息不被破壞,還能完全恢復到壓縮前的原樣,適合用在文本文件、程序可執行文件、程序源代碼。(對原始資源建立統計模型,利用這個統計模型,將常出現的數據用較短的二進制比特序列表示,將不常出現的數據用較長的二進制比特序列表示)客戶端支持的壓縮算法,會在 HTTP 請求中通過頭部中的?Accept-Encoding?字段
  • 有損壓縮:解壓的數據會與原始數據不同但是非常接近。HTTP 請求頭部中的?Accept?字段里的「 q 質量因子」,告訴服務器期望的資源質量。
3.3 HTTPS RSA握手解析

1、HTTPS?在 HTTP 與 TCP 層之間加入了 TLS 協議,來解決上述的風險。[[Pasted image 20250706133549.png]]
2、TLS 握手過程,不同的密鑰交換算法,TLS 的握手過程可能會有一些區別。密鑰交換算法,因為考慮到性能的問題,所以雙方在加密應用信息時使用的是對稱加密密鑰,而對稱加密密鑰是不能被泄漏的,為了保證對稱加密密鑰的安全性,所以使用非對稱加密的方式來保護對稱加密密鑰的協商,這個工作就是密鑰交換算法負責的。(最簡單的?RSA?密鑰交換算法)

  • 經過「四個消息」就可以完成 TLS 握手,也就是需要 2個 RTT 的時延RTT(Round-Trip Time)時延是指數據從發送端到接收端并返回發送端所需的總時間,即一次完整的“往返”通信延遲)
    3、RSA 握手過程
  • 在RSA密鑰協商算法中,客戶端會生成隨機密鑰,并使用服務端的公鑰加密后再傳給服務端。根據非對
    稱加密算法,公鑰加密的消息僅能通過私鑰解密,這樣服務端解密后,雙方就得到了相同的密鑰(服務端就得到客戶端生成的隨機秘鑰),再用它加密應用消息。
  • 使用RSA密鑰協商算法的最大問題是不支持前向保密。因為客戶端傳遞隨機數(用于生成對稱加密密鑰的條件之一)給服務端時使用的是公鑰加密的,服務端收到后,會用私鑰解密得到隨機數。所以一旦服務端的私鑰泄漏了,過去被第三方截獲的所有TLS通訊密文都會被破解。為了解決這個問題,后面就出現了 ECDHE 密鑰協商算法
3.4 HTTPS ECDHE 握手解析

1、HTTPS 常用的密鑰交換算法有兩種,分別是 RSA 和 ECDHE 算法。ECDHE秘鑰交換算法[[Pasted image 20250706153243.png]]

3.5 HTTPS 如何優化
3.6 HTTP/2 牛逼在哪?

1、HTTP/2 出來的目的是為了改善 HTTP 的性能

  • 兼容 HTTP/ 1.1
  • HPACK?算法壓縮頭部:客戶端和服務器兩端都會建立和維護「字典」,用長度較小的索引號表示重復的字符串,再用 Huffman 編碼壓縮數據,可達到 50%~90% 的高壓縮率
  • 二進制幀:將 HTTP/1 的文本格式改成二進制格式傳輸數據,極大提高了 HTTP 傳輸效率
  • 并發傳輸:HTTP/2 通過 Stream 實現的并發
  • 服務器主動推送資源
3.7 HTTP/3 強勢來襲

1、HTTP/2 的缺點

  • 隊頭阻塞:當 TCP 丟包時,整個 TCP 都要等待重傳
  • TCP 與 TLS 的握手時延遲:發起 HTTP 請求時,需要經過 TCP 三次握手和 TLS 四次握手
  • 網絡遷移需要重新連接:IP 地址或者端口變動了,就會導致需要 TCP 與 TLS 重新握手(比如 4G 網絡環境切換成 WiFi)
    2、HTTP/3 QUIC協議:將傳輸協議替換成了 UDP,還基于 UDP 協議在「應用層」實現了?QUIC 協議[[Pasted image 20250706191606.png]]
  • 無隊頭阻塞
  • 更快的連接建立
  • 連接遷移
3.8 HTTP 和 RPC 的區別

1、服務發現:在?HTTP?中,你知道服務的域名,就可以通過?DNS 服務去解析得到它背后的 IP 地址;而?RPC?的話,就有些區別,一般會有專門的中間服務去保存服務名和IP信息
2、底層連接形式:RPC 協議一般還會再建個連接池
3、傳輸的內容。

  • 將結構體轉為二進制數組的過程就叫序列化,反過來將二進制數組復原成結構體的過程叫反序列化

RPCRemote?Procedure?Call),又叫做遠程過程調用。它本身并不是一個具體的協議,而是一種調用方式。如果現在這不是個本地方法,而是個遠端服務器暴露出來的一個方法?remoteFunc,如果我們還能像調用本地方法那樣去調用它,這樣就可以屏蔽掉一些網絡細節

HTTP 和 WebSocker

1、HTTP協議設計之初,考慮的是看看網頁文本的場景,能做到客戶端發起請求再由服務器響應就夠了,根本就沒考慮網頁游戲這種,客戶端和服務器之間都要互相主動發大量數據的場景。所以,為了更好的支持這樣的場景,我們需要另外一個基于TCP的新協議,新的應用層協議WebSocket就被設計出來了。
2、瀏覽器在?TCP 三次握手建立連接之后,都統一使用 HTTP 協議先進行一次通信。

  • 如果這時候是想建立 WebSocket 連接,就會在 HTTP 請求里帶上一些特殊的header 頭 [[Pasted image 20250706201759.png]]
    3、WebSocker的消息格式 [[QQ_1751804965426.png]]
  • 數據包在WebSocket中被叫做
  • 適用于需要服務器和客戶端(瀏覽器)頻繁交互的大部分場景,比如網頁/小程序游戲,網頁聊天室,以及一些類似飛書這樣的網頁協同辦公軟件

我們知道TCP連接的兩端,同一時間里,雙方都可以主動向對方發送數據。這就是所謂的全雙工。而現在使用最廣泛的HTTP/1.1,也是基于TCP協議的,同一時間里,客戶端和服務器只能有一方主動發數據,這就是所謂的半雙工。[[Pasted image 20250706203228.png]]

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/92165.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/92165.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/92165.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

每日面試題20:spring和spring boot的區別

我曾經寫過一道面試題,題目是為什么springboot項目可以直接打包給別人運行?其實這涉及到的就是springboot的特點。今天來簡單了解一下springboot和spring的區別, Spring 與 Spring Boot:從“全能框架”到“開箱即用”的進化之路 …

ClickHouse數據遷移

ClickHouse實例是阿里云上的云實例,想同步數據到本地,本地部署有ClickHouse實例,下面為單庫單表 源實例:阿里云cc-gs5xxxxxxx.public.clickhouse.ads.aliyuncs.com:8123 目標實例:本地172.16.22.10:8123 1、目標實例建…

sqli-labs-master/Less-41~Less-50

Less-41這一關還是用堆疊注入,這關數字型不需要閉合了。用堆疊的話,我們就不爆信息了。我們直接用堆疊,往進去寫一條數據?id-1 union select 1,2,3;insert into users (id,username,password) values(666,zk,180)--看一下插進去了沒?id-1 u…

Tiger任務管理系統-10

十是個很好美好的數字,十全十美,確實沒讓人失望,收獲還是很大的。 溫習了前端知識,鞏固了jQuery,thymeleaf等被忽視的框架,意外將之前的所學所用的知識都連起來了,感覺有點像打通了任督二脈一樣…

ora-01658 無法為表空間 users中的段創建initial區

ora-01658 無法為表空間 users中的段創建initial區 參考1 參考2 參考3 參考4 給用戶新增表空間 alter tablespace system add datafile D:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSTEM03.DBF size 5G autoextend on next 10M;設置表空間文件自動擴展 ALTER DATABASE DATAFILE /…

lodash的替代品es-toolkit詳解

一、es-toolkit簡介 es-toolkit 是一款先進的高性能 JavaScript 實用程序庫,體積小巧,并支持強類型注釋,典型特征包括: 提供各種日常實用函數并采用現代實現,例如: debounce、delay、chunk、sum 和 pick 等 設計充分考慮了性能,在現代 JavaScript 環境中實現了 2-3 倍…

【原創】基于gemini-2.5-flash-preview-05-20多模態模型實現短視頻的自動化二創

畫面和解說保持一致,這個模型就是NB[16:57:37] [*] 正在從視頻中提取幀和時長 (頻率: 1.0 幀/秒)... [16:57:55] [] 提取完成。視頻時長: 83.40秒, 提取了 84 幀。 [16:57:55] [*] 使用AI供應商: gemini [16:57:55] [*] 正在進行視覺分析... [16:57:55] L-> 正…

數倉架構 數據表建模

數倉架構 主要用來描述 數據加工的實時鏈路 和 離線鏈路之間的關系,即 流批 關系; lamda 架構, 是兩條路, 實時計算式的, 維護數據的實時性。然后每天經過批計算后, 覆蓋實時的計算結果。 保證數據準確性。 kappa架構, 即流批一體了 數據建模 星型模型是數據倉庫中最…

vscode調試python腳本時無法進入函數內部的解決方法

只需在launch.json配置文件中添加“justMyCode”:false.

Python day37

浙大疏錦行 python day37. 內容: 保存模型只需要保存模型的參數即可,使用的時候直接構建模型再導入參數即可 # 保存模型參數 torch.save(model.state_dict(), "model_weights.pth")# 加載參數(需先定義模型結構) mod…

ORACLE進階操作

1 事務 事務的任務便是使數據庫從一種狀態變換成為另一種狀態,這不同于文件系統,它是數據庫所特用的。 所有的數據庫中,事務只針對DML(增刪改),不針對select select只能查看其他事務提交或回滾的數據,不能查…

Modbus 的一些理解

疑問:(使用的是Modbustcp)我在 Modbus slave 上面設置了slave地址為1,位置為40001的位置的值為1,40001這個位置上面的值是怎么存儲的,存儲在哪里的?他們是怎么進行交互的?在Modbus協…

【運動控制框架】WPF運動控制框架源碼,可用于激光切割機,雕刻機,分板機,點膠機,插件機等設備,開箱即用

WPF運動控制框架源碼,可用于激光切割機,雕刻機,分板機,點膠機,插件機等設備,考慮到各運動控制硬件不同,視覺應用功能(應用視覺軟件)也不同,所以只開發各路徑編…

RabbitMQ-日常運維命令

作者介紹:簡歷上沒有一個精通的運維工程師。請點擊上方的藍色《運維小路》關注我,下面的思維導圖也是預計更新的內容和當前進度(不定時更新)。中間件,我給它的定義就是為了實現某系業務功能依賴的軟件,包括如下部分:Web服務器代理…

【Linux基礎知識系列】第九十篇 - 使用awk進行文本處理

在Linux系統中,文本處理是一個常見的任務,尤其是在處理日志文件、配置文件和數據文件時。awk是一個功能強大的文本處理工具,廣泛用于數據提取、分析和格式化。它不僅可以處理簡單的文本文件,還可以處理復雜的結構化數據&#xff0…

第二十七天(數據結構:圖)

圖:是一種非線性結構形式化的描述: G{V,R}V:圖中各個頂點元素(如果這個圖代表的是地圖,這個頂點就是各個點的地址)R:關系集合,圖中頂點與頂點之間的關系(如果是地圖,這個關系集合可能就代表的是各個地點之間的距離)在頂點與頂點…

數據賦能(386)——數據挖掘——迭代過程

概述重要性如下:提升挖掘效果:迭代過程能不斷優化數據挖掘模型,提高挖掘結果的準確性和有效性,從而更好地滿足業務需求。適應復雜數據:數據往往具有復雜性和多樣性,通過迭代可以逐步探索和適應數據的特點&a…

什么是鍵值緩存?讓 LLM 閃電般快速

一、為什么 LLMs 需要 KV 緩存?大語言模型(LLMs)的文本生成遵循 “自回歸” 模式 —— 每次僅輸出一個 token(如詞語、字符或子詞),再將該 token 與歷史序列拼接,作為下一輪輸入,直到…

16.Home-懶加載指令優化

問題1:邏輯書寫位置不合理問題2:重復監聽問題已經加載完畢但是還在監聽

Day116 若依融合mqtt

MQTT 1.MQTT協議概述MQTT是一種基于發布/訂閱模式的輕量級消息傳輸協議,設計用于低帶寬、高延遲或不穩定的網絡環境,廣泛應用于物聯網領域1.1 MQTT協議的應用場景1.智能家居、車聯網、工業物聯網:MQTT可以用于連接各種家電設備和傳感器&#…