HTTP——不同版本區別

目錄

HTTP1.0和HTTP1.1的區別

HTTP1.1相比HTTP1.0性能上的改進:

但是HTTP1.1還是有性能瓶頸:

HTTP/2做了什么優化?

HTTP/3的優點

HTTP與HTTPS的區別

HTTPS的工作原理

1.ClientHello

2.ServerHello

3.客戶端回應

4.服務器的最后回應

三、三者協同作用:確保密鑰安全的核心邏輯

TCP與UDP的區別

1.連接

2.服務對象

3.可靠性

4.擁塞控制,流量控制

5.首部開銷


HTTP1.0和HTTP1.1的區別

HTTP1.1相比HTTP1.0性能上的改進:

使用長連接的方式改善了HTTP1.0短鏈接的性能開銷。

支持管道網絡傳輸,只要第一個請求發出去了,不必等其回來,就可以發第二個請求出去,可以減少整體的響應時間。

但是HTTP1.1還是有性能瓶頸:

  • 請求/響應頭部(header)未經壓縮就發送,首部信息越多延遲越大。只能壓縮Body部分;
  • 發送冗長的首部。每次互相發送相同的首部造成的浪費較多;
  • 服務器是按請求的順序響應的,如果服務器響應慢,會導致客戶端一直請求不到數據,也就是對頭阻塞;
  • 沒有請求優先級控制;
  • 請求只能從客戶端開始,服務器只能被動響應。

HTTP/2做了什么優化?

HTTP/2協議是基于HTTPS的,所以HTTP/2的安全性也有保障的。

那HTTP/2相比HTTP/1.1性能上的改進:

  • 頭部壓縮
  • 二進制格式
  • 并發傳輸
  • 服務器主動推送資源

1.頭部壓縮:HTTP/2會壓縮頭(header)如果你同時發出多個請求,他們的頭是一樣的或相似的,那么,協議會幫你消除重復的部分。這就是所謂的HPACK算法:在客戶端和服務器同時維護一張頭信息表,所有的字段都會存入這個表,生成一個索引號,以后就不發送同樣的字段了,只發送索引號,這就提高速度了。

2.二進制格式:HTTP/2不在像HTTP1.1里的純文本形式的報文,而是全面采用了二進制格式,頭信息和數據體都是二進制,并且統稱為幀:頭信息幀和數據幀。這樣雖然對人不友好,但是對計算機非常友好,因為計算機只懂二進制,那么接收到報文后,無需再將明文的報文轉成二進制,而是直接解析二進制報文,這增加了數據傳輸的效率。

3.并發傳輸:引出了Stream的概念,多個Stream復用在一條TCP連接。解決了HTTP1.1對頭阻塞的問題;

4.服務器主動推送資源:HTTP/2還在一定程度上改善了傳統的請求-應答模型,服務端不再是被動的響應,可以總動像客戶端發送消息

在 HTTP/2 中,多個請求的幀在同一個 TCP 連接上傳輸,若某個請求的幀在傳輸過程中丟失或延遲,導致接收方無法按序接收,就會阻塞該連接上所有請求幀的接收和處理。

HTTP/3的優點

HTTP/2通過頭部壓縮,二進制編碼,多路復用,服務端推送等新特性大幅度提升了HTTP/1.1的性能,而美中不足的是HTTP/2協議是基于TCP實現的,于是存在三個缺陷。

  • 對頭阻塞
  • TCP與TLS的握手延遲
  • 網絡遷移需要重新連接;

因為TCP是字節流協議,TCP層必須保證收到的字節數據是完整且有序的,如果我序列號較低的TCP段在網絡傳輸中丟失了,即使序列號較高的TCP段已經被接收了,應用層無法從內核中讀取到這部分數據

網絡遷移需要重新連接:一個TCP由四元組(元ip地址,源端口,目標ip地址,目標端口)確定的,這意味著如果我ip地址或者端口變動了就要tcp與tls從新握手,這樣不利于移動設備切換網絡的場景,比如4g網絡環境切換成wifi。

HTTP/3就將傳輸層從TCP替換成了UDP,并在UDP協議上開發了QUIC協議,來保證數據的可靠傳輸。

無對頭阻塞,QUIC連接上多個Stream之間并沒有依賴,都是獨立的,也不會由底層協議限制,某個流發送丟包了,只會影響該流,其他流不受影響;

建立連接速度快,因為QUIC內部包含了TLS1.3因此只需要1個RTT就可以同時完成建立連接和TLS密鑰協商,甚至第二次連接的時候,應用數據包可以和QUIC握手信息

連接遷移

QUIC 支持通過連接 ID 保持會話,即便 IP 地址或網絡切換(如 Wi - Fi 轉 4G),連接仍然有效。這種特性特別適用于移動場景,能確保數據連接的穩定性,極大改善了移動設備用戶的體驗。

HTTP與HTTPS的區別

  • HTTP是超文本傳輸協議,信息是明文傳輸,存在安全風險的問題。HTTPS則解決了HTTP不安全的缺陷,在TCP和HTTP網絡層之間加入了SSL/TLS安全協議,使得報文能夠加密傳輸。
  • HTTP連接建立相對簡單,TCP三次握手之后便可進行HTTP的報文傳輸。而HTTPS在TCP三次握手之后,還需進行SSL/TLS的握手過程,才可進入加密報文傳輸。
  • 兩者默認的端口不一樣,HTTP默認端口號是80,HTTPS默認端口號是443.
  • HTTPS協議需要先AC(證書權威機構)申請數字證書,來保證服務器的身份是可行的。

HTTPS的工作原理

1.ClientHello

首先,由客戶端向服務器發起加密通信請求,也就是ClientHello請求。在這一步,客戶端主要向服務器發送以下信息:

  • 客戶端支持的SSL/TLS協議版本,如TLS1.2版本
  • 客戶端生產的隨機數Client Random,后面用于生產【會話密鑰】
  • 客戶端支持的密碼套件列表,如RSA加密算法。

2.ServerHello

服務器收到客戶端請求后,向往客戶端發出響應,也就是SeverHello。服務器回應的內容有如下內容:

  • 確認SSL/TLS協議版本,如果瀏覽器不支持,則關閉加密通信。
  • 服務器生產的隨機數(Server Random),后面用于生產【會話密鑰】
  • 確認的密碼套件列表,如RSA加密算法
  • 服務器的數字證書

3.客戶端回應

客戶端收到服務器的回應后,首先通過瀏覽器或者操作系統中的CA公鑰,確認服務器的數字證書的真實性。

如果證書沒有問題,客戶端會從數字證書中取出服務器的公鑰,然后使用它加密報文,向服務器發送如下信息:

  • 一個隨機數。該隨機數會被服務器公鑰加密
  • 加密通信算法改變通知,表示隨后的信息都將用【會話密鑰】加密通信
  • 客戶端握手結束通知,表示客戶端的握手階段已經結束。這一項同時把之前所有內容的發送的數據做個摘要,用來供服務端校驗。

上面第一項的隨機數是整個握手階段的第三個隨機數,這樣服務器和客戶端就同時有三個隨機數,接著用雙方協商的加密算法,各自生成本次通信的【會話密鑰】。

4.服務器的最后回應

服務器收到客戶端的第三個隨機數之后,就通過協商的加密算法,計算出本次通信的【會話密鑰】。然后,向客戶端發送最后的信息:

  • 加密通信算法改變通知,表示隨后的信息都將用【會話密鑰】加密通信
  • 服務器握手結束通知,表示服務器的握手階段已經結束。這一項同時把之前所有內容的發生的數據做個摘要,用來供客戶端校驗。

至此,整個SSL/TLS的握手階段全部結束。接下來,客戶端與服務器進入加密通信,就完全是使用普通的HTTP協議,只不過使用【會話密鑰】加密內容。

三、三者協同作用:確保密鑰安全的核心邏輯

  1. 隨機性疊加
    三個隨機數的組合(ClientRandom + ServerRandom + Pre-Master Secret)形成?高熵值的密鑰材料,即使其中一個隨機數被泄露,攻擊者也無法推導出完整密鑰(需同時破解三個隨機數)。

  2. 防止重放攻擊
    每次通信的隨機數唯一,即使攻擊者截獲舊通信數據,也無法用舊隨機數重新生成當前會話的密鑰。

  3. 雙向驗證與密鑰協商

    • 客戶端和服務端通過隨機數確認對方的參與(確保不是單向偽造)。
    • 預主密鑰的安全傳輸(如通過服務端公鑰加密)確保只有合法通信雙方能計算出主密鑰。

TCP與UDP的區別

1.連接

  • TCP是面向連接的傳輸層協議,傳輸數據前先要建立連接。
  • UDP是不需要連接,即刻傳輸數據。

2.服務對象

  • TCP是一對一的兩點服務,即一條連接只有兩個端點。
  • UDP支持一對一,一對多,多對多的交互通信。

3.可靠性

  • TCP是可靠交付數據的,數據可以無差錯,不丟失,不重復,按序到達。
  • UDP是盡最大努力交付,不保證可靠交付數據。但是我們可以基于UDP傳輸協議實現一個可靠的傳輸協議,比如QUIC協議。

4.擁塞控制,流量控制

  • TCP有擁塞控制和流量控制機制,保證數據傳輸的安全性。
  • UDP則沒有,即使網絡非常擁堵了,也不會影響UDP的發生速率。

5.首部開銷

  • TCP首部長度較長,會有一定的開銷。
  • UDP首部只有8個字節,并且是固定不變的,開銷較小。

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

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

相關文章

關于M0+芯片的IAP應用導致延時不準確解釋

前言:在給項目中使用的M0芯片做IAP功能時一切一切都是那么的自然水到渠成,但是筆者在實現完IAP功能后,卻發現APP端掛載的單總線功能崩潰了,最開始沒有懷疑是bootload導致的。因為筆者在使用同一篇代碼的時候單總線掛載的設備不同&…

安卓登錄學習筆記

1. 背景與目標 (Background and Goal) 背景: 我們要創建一個用戶登錄界面。用戶輸入用戶名和密碼,點擊“登錄”按鈕。應用會顯示一個加載中的“圈圈”(ProgressBar),然后模擬一個耗時2秒的網絡請求。根據請求結果,界面…

Git(三):分支管理

文章目錄 Git(三):分支管理理解分支創建分支切換分支合并分支刪除分支合并沖突分支管理策略分支策略Bug分支刪除臨時分支 Git(三):分支管理 理解分支 本章介紹Git的殺手級功能之一:分支 分支就 是科幻電影里面的平行宇宙,當你正…

電子電氣架構 --- 電氣架構基礎(汽車電子)

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 做到欲望極簡,了解自己的真實欲望,不受外在潮流的影響,不盲從,不跟風。把自己的精力全部用在自己。一是去掉多余,凡事找規律,基礎是誠信;二是…

RestClient 功能介紹、完整使用示例演示, 和RestTemplate、WebClient 對比

RestClient功能介紹 RestClient是Spring Framework 6.1版本引入的同步HTTP客戶端,旨在替代老舊的RestTemplate,提供更現代、流暢的API設計。其核心特點包括: 流暢API(Fluent API): 支持鏈式調用&#xff0…

VM經常遇見的運行慢幾種情況、以及設置方法

大家好,我是東哥說-MES 啟動虛擬機是提示如下內容 “無法打開內核設備“\.\VMCIDev\VMX”: 操作成功完成。是否在安裝 VMware Workstation 后重新引導? 模塊“DevicePowerOn”啟動失敗。 未能啟動虛擬機。” 2.用記事本打開安裝目錄下TIA Portal STEP7 Prof Safety WinCC …

【C++語法】類和對象(4)——日期類和const成員函數

6.類和對象&#xff08;4&#xff09; 文章目錄 6.類和對象&#xff08;4&#xff09;回顧簡單日期類的實現代碼補充&#xff1a;前置與后置的重載區別補充&#xff1a;關于流插入運算符&#xff08;<<&#xff09;的解釋拓展&#xff1a;仿照流插入操作符(<<)的作…

當凌晨的鍵盤聲,遇見黎明的星光?

地鐵玻璃映出你困倦的臉&#xff0c;耳機里的音樂循環到第 17 遍&#xff0c;早高峰的人群像沙丁魚罐頭般擠壓著你。這是你每天雷打不動的三小時通勤路&#xff0c;從城市邊緣到寫字樓林立的 CBD&#xff0c;窗外的風景換了四季&#xff0c;而你始終困在搖晃的車廂里&#xff0…

Web Worker技術詳解與應用場景

我們來詳細探討一下 Web Worker。它是現代 Web 開發中解決 JavaScript 單線程限制、提升應用性能和響應能力的關鍵技術。 核心問題&#xff1a;JavaScript 的單線程模型 瀏覽器 UI 線程&#xff08;主線程&#xff09;&#xff1a;JavaScript 在瀏覽器中默認運行在單個線程&a…

React Next快速搭建前后端全棧項目并部署至Vercel

很好&#xff0c;你是想搞清楚Next.js 的后端結構和傳統 Node Express 的區別對比&#xff0c;我來整理一套結構化、精準、對面試有說服力的解答&#xff0c;并附示意結構圖。 01Next vs Express 、## ??1?? Next.js 后端是怎么構建的 Next.js 在默認情況下本身就集成后…

【T寶客戶項目解決過程】01-模型訓練

1 項目需求描述 博主自己開了一家T寶店&#xff0c;有一個客戶有這個需求&#xff1a;有一大堆圖像&#xff0c;大概有10多萬張圖&#xff0c;都是比較小尺寸的圖。各種類型都有&#xff0c;我們想要通過將不同類型發圖像進行分開&#xff0c;如何實現呢&#xff1f; 2 思路 …

如何在中將網絡改為橋接模式并配置固定IP地址

在使用服務器搭建虛擬機的過程中&#xff0c;我們發現有許多場景需要將虛擬機的網絡配置為橋接模式&#xff0c;并為其設置固定的IP地址。為了幫助大家更高效地進行網絡配置&#xff0c;提升虛擬機的連接穩定性和管理便捷性&#xff0c;我們總結了這篇指南&#xff0c;介紹如何…

強化學習 - 基于策略的Reinforce算法

&#x1f3af; REINFORCE 策略梯度算法推導&#xff08;完整&#xff09; 1. 目標函數定義 我們希望最大化策略的期望回報&#xff1a; J ( θ ) E τ ~ π θ [ R ( τ ) ] J(\theta) \mathbb{E}_{\tau \sim \pi_\theta} \left[ R(\tau) \right] J(θ)Eτ~πθ??[R(τ…

Windows Sever Core安裝及常用命令

一、Windows Sever Core 在安裝 Windows Server 的過程中&#xff0c;可以選擇“Server Core”&#xff08;核心安裝&#xff09;這種沒有圖形用戶界面&#xff08;GUI&#xff09;的安裝方式。這種模式下&#xff0c;Windows Server 主要通過命令行或遠程管理進行配置和維護&…

Java 單元測試實戰:以“兩數之和”為例,講透測試思維

&#x1f31f;Java 單元測試實戰&#xff1a;以“兩數之和”為例&#xff0c;講透測試思維 在 Java 開發中&#xff0c;單元測試不僅是驗證功能正確的手段&#xff0c;更是衡量開發者是否具備“測試思維”的標志。今天我們通過一個最簡單的功能——“兩數之和”來系統講解如何…

Bootstrap 5學習教程,從入門到精通,Bootstrap 5 提示框(Tooltips) 語法知識點及案例(21)

Bootstrap 5 提示框(Tooltips) 語法知識點及案例 一、提示框語法知識點 1. 基本概念 提示框(Tooltips)是當用戶懸停在元素上時顯示的小浮動標簽&#xff0c;用于提供額外信息。 2. 核心屬性 data-bs-toggle"tooltip" - 標識元素為提示框觸發器title - 提示框顯示…

設計模式實戰指南:從源碼解析到Java后端架構的藝術

&#x1f3af; 設計模式實戰指南&#xff1a;從源碼解析到Java后端架構的藝術 概述 本文檔基于設計模式分類&#xff0c;詳細介紹Java后端開發中各種設計模式的實際應用場景&#xff0c;結合Spring、MyBatis、Redis等主流框架的源碼分析&#xff0c;幫助開發者深入理解設計模…

Python Arrow 庫詳解:更智能的日期時間處理

1. 安裝與基本用法 安裝 Arrow pip install arrow基本使用示例 import arrow# 獲取當前時間 now arrow.now() print(now) # 輸出: 2023-07-15T14:30:45.12345608:00# 創建特定時間 dt arrow.get(2023-07-15 14:30:00, YYYY-MM-DD HH:mm:ss) print(dt) # 輸出: 2023-07-15T…

大家電破渠道困局,小家電攻用戶體驗,云徙有何解法?

中國家電行業正經歷深刻轉型。 自2018年市場規模觸及8400億頂峰后&#xff0c;行業從增量競爭轉向存量博弈。與此同時&#xff0c;線上渠道在2023年首次以58%的占比超越線下&#xff0c;其中掃地機器人等小家電品類線上滲透率突破90%。消費需求也在同步重構——從家庭場景向個…

DMDPC多副本數據分布測試

需求&#xff1a;測試建表和插入數據是否會根據分布列進行自動分發。 驗證方法&#xff1a;1&#xff09;準備基礎環境&#xff1a;創建用戶和表空間。2&#xff09;創建數據分布測試表&#xff0c;并插入數據。3&#xff09;查詢指定分區數據&#xff0c;驗證數據分布情況。 …