http 3.0 有哪些新特性

devtools/2024/9/22 17:38:20/
http://www.w3.org/2000/svg" style="display: none;">

HTTP/3 是超文本传输协议(HTTP)的最新主要版本,其显著特点是放弃了传统的TCP作为传输层协议,转而采用基于UDP的QUIC(Quick UDP Internet Connections)协议。以下是HTTP/3利用QUIC实现高性能传输的关键特性:

  1. 低延迟

    • QUIC通过减少握手时延来降低连接建立的延迟,使用了一种名为0-RTT(零往返时间)的机制,允许在连接初始化阶段就发送数据,从而避免了传统TCP三次握手带来的延迟。
  2. 多路复用与无队头阻塞

    • HTTP/2虽然引入了多路复用,但在TCP层面上仍存在队头阻塞的问题,即一个丢失的数据包会导致所有后续数据包暂停传输。而HTTP/3在QUIC上原生支持多路复用且每个流可以独立传输和确认,从而消除了队头阻塞。
  3. 连接迁移

    • QUIC允许在IP地址变化的情况下保持连接状态,这对于移动设备或者网络环境发生变化时的连接持久性至关重要,有助于提高用户体验。
  4. 更快的错误恢复

    • QUIC提供了更高效的重传机制,能够更快地检测和恢复丢包,特别是在无线网络环境下表现更为出色。
  5. 安全设计

    • QUIC将TLS加密集成到了协议栈中,使得每个新的QUIC连接都能快速并且安全地建立起来,并且可以针对每个流独立执行加密操作。
  6. 拥塞控制优化

    • QUIC包含了自己的拥塞控制算法,可以根据网络条件动态调整带宽使用,以提供更好的整体性能和稳定性。

这些改进使HTTP/3不仅在网络通信性能上有显著提升,而且增强了网络应用的可靠性和用户体验,因此,在很多场景下,HTTP/3确实可以被认为是正在“吞噬世界”,因为它有望成为未来Web和应用程序传输数据的主要方式。随着各大浏览器厂商和服务器软件的支持度不断提高,HTTP/3的普及率也在持续增长。


http://www.ppmy.cn/devtools/4120.html

相关文章

AI大语言模型成功是否支持维特根斯坦“意义即使用”立场?

比特币为啥有用?不是它代表多少财富,而是有人使用它,只要被使用就有价值,而不在于该符号本身有多少价值。 我们所说的 "成功 "是指当前的人工智能/LLM 能够生成被人类读者认为连贯、翔实甚至令人信服的文本。 维特根斯…

数据结构:单链表

目录 链表的概念 链表 举个事例: 代码实现 实现功能(代码的解析全在注释中) 申请内存 尾部插入 头部插入 尾部删除 头部删除 查找 在指定位置之前插⼊数据 在指定位置之后插⼊数据 删除pos节点 删除pos之后的节点 打印 销毁 完整代码 text.h…

Ubuntu设置中文输入法教程

在Ubuntu上设置中文输入法很简单,你可以按照以下步骤进行操作: 打开系统设置 点击桌面左上角的"Activities"图标,然后在搜索栏中输入"Settings",点击打开系统设置。 进入区域与语言设置 在系统设置中&#x…

fastapi写一个上传的接口

首先,确保您已经在 Python 环境中安装了 FastAPI。 安装环境: pip install fastapi uvicorn让我们创建一个图片上传的接口: from fastapi import FastAPI, File, UploadFile from fastapi.responses import JSONResponse import shutil im…

java的volatile

在Java中,线程之间对内存写入操作的可见性是一个重要的问题,因为每个线程都有自己的工作内存,并且线程之间共享主内存。当一个线程修改了共享变量的值,其他线程并不一定能立即看到这个修改,这就是所谓的可见性问题。 例…

汇编语言——将BX中的无符号数和有符号数以二进制、八进制、十六进制、十进制形式输出

文章目录 将BX中的无符号数以二进制形式输出将BX中的无符号数以八进制形式输出将BX中的无符号数以十六进制形式输出将BX中的无符号数以十进制形式输出将BX中的有符号数以十进制形式输出 将BX中的无符号数以二进制形式输出 利用移位指令会影响CF,默认dl30h(数字0)&a…

牛客周赛 Round 39(补题)

小红不想做完全背包 (hard) 题目描述 本题和easy版本的唯一区别是:ppp没有必须等于3的限制。 完全背包是一个经典问题,但小红完全不会完全背包,因此她不想做完全背包。 现在小红拿到了一个长的很像完全背包的题&…

Freertos学习第二天-Freertos基于ESP32-给任务传递单个参数

一共有两种方法 第一种: 在创建任务中可以传递参数,void *pt 传递了一个空指针 void Task1(void *pt) 可以运用这个空指针来设置引脚 byte * pbLED1PIN;pbLEDPIN &LED1_PIN;void * pvLED1PIN;pvLED1PIN (void *)pbLED1PIN; 以上代码意思是 byte * pbLE…