HTTP/2、HTTP/3分別解決了什么問題

總的來說就是HTTP/1.1是請求-響應模型導致隊頭阻塞問題,HTTP2是TCP層面導致隊頭阻塞問題

HTTP/2

多路復用,解決了HTTP/1.1隊頭阻塞問題

HTTP/1.1 的實現是基于請求-響應模型的。同一個連接中,HTTP 完成一個事務(請求與響應),才能處理下一個事務,也就是說在發出請求等待響應的過程中,是沒辦法做其他事情的,如果響應遲遲不來,那么后續的請求是無法發送的,也造成了隊頭阻塞的問題。

HTTP/2 實現了 Stream 并發,多個 Stream 只需復用 1 個 TCP 連接,節約了 TCP 和 TLS 握手時間,以及減少了 TCP 慢啟動階段對流量的影響。不同的 Stream ID 可以并發,即使亂序發送幀也沒問題,比如發送 A 請求幀 1 -> B 請求幀 1 -> A 請求幀 2 -> B 請求幀2,但是同一個 Stream 里的幀必須嚴格有序。

壓縮HTTP頭,節省報文體積

因為大部分HTTP請求的header是重復的,尤其是長長的cookie,通過靜態表和 Huffman 編碼的方式,將體積壓縮了近一半,而且針對后續的請求頭部,還可以建立動態表,將體積壓縮近 90%,大大提高了編碼效率,同時節約了帶寬資源。

支持服務器主動推送資源

HTTP/3

基于UDP實現了一個可靠的傳輸協議QUIC,解決了TCP隊頭阻塞問題

HTTP/2 多個請求是跑在一個 TCP 連接中的,那么當 TCP 丟包時,整個 TCP 都要等待重傳,那么就會阻塞該 TCP 連接中的所有請求。
在這里插入圖片描述

TCP與TLS的握手時延遲

發起 HTTP 請求時,需要經過 TCP 三次握手和 TLS 四次握手(TLS 1.2)的過程,因此共需要 3 個 RTT 的時延才能發出請求數據。

網絡遷移需要重新連接

一個 TCP 連接是由四元組(源 IP 地址,源端口,目標 IP 地址,目標端口)確定的,這意味著如果 IP 地址或者端口變動了,就會導致需要 TCP 與 TLS 重新握手,這不利于移動設備切換網絡的場景,比如 4G 網絡環境切換成 WiFi。

這些問題都是 TCP 協議固有的問題,無論應用層的 HTTP/2 在怎么設計都無法逃脫。要解決這個問題,就必須把傳輸層協議替換成 UDP,這個大膽的決定,HTTP/3 做了!

QUIC協議的提出!!!

用UDP代替TCP,我們都知道UDP是一個簡單不可靠的傳輸協議,UDP包之間不需要有序而且不需要建立連接,即沒有握手揮手,那自然是快的。

但是在傳輸數據前雖然需要 QUIC 協議握手,這個握手過程只需要 1 RTT,握手的目的是為確認雙方的「連接 ID」,連接遷移就是基于連接 ID 實現的(而非源 IP 地址,源端口,目標 IP 地址,目標端口四元組)。

當然,HTTP/3 不僅僅只是簡單將傳輸協議替換成了 UDP,還基于 UDP 協議在「應用層」實現了 QUIC 協議,它具有類似 TCP 的連接管理、擁塞窗口、流量控制的網絡特性,相當于將不可靠傳輸的 UDP 協議變成“可靠”的了,所以不用擔心數據包丟失的問題。

每個數據包都有一個序號唯一標識。當某個流中的一個數據包丟失了,即使該流的其他數據包到達了,數據也無法被 HTTP/3 讀取,直到 QUIC 重傳丟失的報文,數據才會交給 HTTP/3。

其他流的數據報文只要被完整接收,HTTP/3 就可以讀取到數據。這與 HTTP/2 不同,HTTP/2 只要某個流中的數據包丟失了,其他流也會因此受影響

QUIC 協議并不是與 TLS 分層,而是 QUIC 內部包含了 TLS,它在自己的幀會攜帶 TLS 里的“記錄”,再加上 QUIC 使用的是 TLS 1.3,因此僅需 1 個 RTT 就可以「同時」完成建立連接與密鑰協商,甚至在第二次連接的時候,應用數據包可以和 QUIC 握手信息(連接信息 + TLS 信息)一起發送,達到 0-RTT 的效果。

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

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

相關文章

3.4作業

課上代碼復習&#xff1a; 廣播接收端代碼: #include<myhead.h> int main(int argc, const char *argv[]) {//創建套接字int rfd socket(AF_INET,SOCK_DGRAM,0);if(rfd -1){perror("socket error");return -1;}printf("rfd %d\n",rfd);//填充地…

臺式電腦電源各線的電壓和電流輸出和輸出電流

臺式電腦電源是電腦硬件的重要組成部分。 它為計算機的各個部件提供所需的電壓和電流。 不同的硬件設備和組件有不同的電壓和電流輸出。 下面詳細介紹臺式電腦電源各線的電壓&#xff0c;包括3.3V、5V、12V、-12V、-5V和5VSB&#xff0c;以及它們的輸出電流和用途。 3.3V&#…

【AI+CAD】(一)ezdxf 解析DXF文件

DXF文件格式理解 DXF文件格式是矢量圖形文件格式&#xff0c;其詳細說明了如何表示不同的圖形元素。 DXF是一個矢量圖形文件&#xff0c;它捕獲CAD圖形的所有元素&#xff0c;例如文本&#xff0c;線條和形狀。更重要的是&#xff0c;DXF是用于在CAD應用程序之間傳輸數據的圖形…

STM32自學?I2C

這里只是大體介紹&#xff0c;具體的可參考STM32數據手冊

數據結構與算法-選擇排序

引言 在計算機科學中&#xff0c;數據結構和算法是兩個至關重要的基石。它們共同決定了程序的效率、可讀性和可維護性。本文我們將聚焦于一種基礎而直觀的排序算法——選擇排序&#xff0c;并探討其內在的工作機制以及在實際應用中的優缺點。 一、什么是選擇排序&#xff1f; …

Leetcode 3067. Count Pairs of Connectable Servers in a Weighted Tree Network

Leetcode 3067. Count Pairs of Connectable Servers in a Weighted Tree Network 1. 解題思路2. 代碼實現 題目鏈接&#xff1a;3067. Count Pairs of Connectable Servers in a Weighted Tree Network 1. 解題思路 這一題沒想到什么好的方法&#xff0c;走的是暴力求解的路…

xss.haozi.me:0x07

<img src1 onerroralert(1)

Spring MVC ThemeResolver原理解析

在Spring MVC框架中&#xff0c;ThemeResolver&#xff08;主題解析器&#xff09;是一個重要但經常被忽視的組件。它負責解析和管理Web應用程序中的主題設置&#xff0c;允許用戶根據不同的需求和偏好切換界面主題。ThemeResolver為開發者提供了一種靈活的方式來控制應用程序的…

tomcat下載安裝配置教程

tomcat下載安裝配置教程 我是使用tomcat下載安裝及配置教程_tomcat安裝-CSDN博客 此貼來進行安裝配置&#xff0c;原文21年已經有些許不同。 下載tomcat 官網&#xff1a;http://tomcat.apache.org/ 我們老師讓安裝8.5以上&#xff0c;所以我直接選擇版本9 點擊9頁面之后…

DPDK常用API合集三

librte_timer 此庫為 DPDK 執行單元提供定時器服務&#xff0c;提供異步執行函數的能力。它可以是周期性的函數調用&#xff0c;也可以是一次性調用。它使用環境抽象層&#xff08;EAL&#xff09;提供的定時器接口獲取精確的時間參考&#xff0c;并可以根據需要以每個核心為基…

2024.03.03藍橋云課筆記——排序

sort簡介 #include<algorithm> 使用的是快速排序 時間復雜度為O(nlogn) sort使用(默認是從小到大) 1.sort(起始地址&#xff0c;結束地址的下一位&#xff0c;*比較函數&#xff09;&#xff1b; #include<iostream> #include<algorithm> using namesp…

HTTPS的實現原理

圖片來源&#xff1a;HTTPS 詳解一&#xff1a;附帶最精美詳盡的 HTTPS 原理圖 - 個人文章 - SegmentFault 思否 加密流程按圖中的序號分為&#xff1a; 客戶端請求 HTTPS 網址&#xff0c;然后連接到 server 的 443 端口 (HTTPS 默認端口&#xff0c;類似于 HTTP 的80端口)。…

Windows批處理:bat文件學習

目錄 第一章、快速了解Windows批處理1.1&#xff09;Windows批處理相關概念介紹1.1.1&#xff09;批處理的起源1.1.2&#xff09;bat文件介紹 1.2&#xff09;Demo1.2.1&#xff09;創建文件添加命令1.2.2&#xff09;bat腳本中的命令解釋 第二章、實例2.1&#xff09;點擊bat文…

navicat安裝11.3

一、安裝navicat 1、下載navicat 2、解壓壓縮包 3、點擊exe文件 4、輸入密鑰&#xff1a; NAVH-WK6A-DMVK-DKW3 5、點擊打開&#xff1a; 輸入連接參數&#xff1a; 6、查看連接好倉庫 7、 在使用navicat來編寫sql語句 8、編寫語句 連接不上問題&#xff0c;檢查問題&#…

[出錯]-RuntimeError: “slow_conv_transpose2d_out_cpu“ not implemented for ‘Byte‘

一開始我一直一維是torch版本的問題 輸入是用cv2讀出來的&#xff0c;數據類型dtype是默認是unit8&#xff0c;輸入到模型中&#xff0c;除了要將他轉為tenso以外&#xff0c;還要.float將數據類型轉為浮點數。

【Vue3】深入理解Vue中的ref屬性

&#x1f497;&#x1f497;&#x1f497;歡迎來到我的博客&#xff0c;你將找到有關如何使用技術解決問題的文章&#xff0c;也會找到某個技術的學習路線。無論你是何種職業&#xff0c;我都希望我的博客對你有所幫助。最后不要忘記訂閱我的博客以獲取最新文章&#xff0c;也歡…

Redis 之三:Redis 的發布訂閱(pub/sub)

概念介紹 Redis 發布訂閱 (pub/sub) 是一種消息通信模式&#xff0c;它允許客戶端之間進行異步的消息傳遞 Redis 客戶端可以訂閱任意數量的頻道。 模型中的角色 在該模型中&#xff0c;有三種角色&#xff1a; 發布者&#xff08;Publisher&#xff09;&#xff1a;負責發送信…

嵌入式中7個底層數據結構分解

在編程的世界里&#xff0c;數據結構是構建信息框架的骨架。就像現實生活中的建筑需要精心設計的結構一樣&#xff0c;我們的數據也需要合適的結構來保證程序的高效和穩定。今天&#xff0c;我們就像探險家一樣&#xff0c;一起去探索七大數據結構的奧秘&#xff0c;并揭開它們…

光路科技:工業以太網交換機引領工業互聯網新篇章

隨著全球范圍內工業4.0的浪潮不斷涌動&#xff0c;工業互聯網作為其核心驅動力&#xff0c;正引領著工業生產向智能化、網絡化的嶄新階段邁進。在這一轉型的浪潮中&#xff0c;光路科技憑借其卓越的工業互聯設備與創新解決方案&#xff0c;正為工業互聯網領域的發展注入新的活力…

Linux環境基礎開發工具使用

目錄 1.Linux軟件包管理器yum 什么是軟件包 關于 lrzsz 查看軟件包 2.Linux開發工具 2.1.vim的基本概念 2.2vim的基本操作 2.3vim命令模式命令集 1.插入模式 2.從插入模式切換為命令模式 3.移動光標 4.刪除文字 5.復制 6.替換 7.撤銷上一次的操作 8.更改 2.4v…