HTTP/3 协议学习

news2024/11/24 22:41:24

前一篇

HTTP/2 协议学习-CSDN博客


HTTP/3 协议介绍

HTTP/3 是互联网上用于传输超文本的协议 HTTP 的第三个主要版本。它是 HTTP/2 的后继者,旨在进一步提高网络性能和安全性。HTTP/3 与前两个版本的主要区别在于它使用了一个完全不同的底层传输协议——QUIC(Quick UDP Internet Connections),而不是 TCP(Transmission Control Protocol)。

主要特点:

  • 基于 QUIC 协议

    • UDP 基础:QUIC 基于 UDP(User Datagram Protocol),这使得它比基于 TCP 的协议更快,因为它避免了 TCP 的握手过程和队头阻塞问题。

    • 多路复用:QUIC 支持多路复用,允许在一个连接上同时传输多个数据流,而不会相互阻塞。

  • 改进的连接建立

    • 0-RTT 数据:HTTP/3 支持 0-RTT(Round-Trip Time)数据传输,这意味着在建立连接时可以立即发送数据,减少了延迟。

    • 快速重连:QUIC 的连接建立过程比 TCP 更快,特别是在网络条件不佳或需要频繁重连的情况下。

  • 更好的安全性

    • 内置加密:QUIC 在协议层内置了加密,提供了比传统 HTTP/HTTPS 更强的安全保障。

    • 改进的认证和加密:QUIC 使用 TLS 1.3 进行加密和认证,提供了更强的安全性和更快的握手速度。

  • 流量控制和拥塞控制

    • 更细粒度的流量控制:QUIC 提供了比 TCP 更细粒度的流量控制,可以更好地管理数据流。

    • 改进的拥塞控制:QUIC 的拥塞控制算法可以更快地适应网络条件的变化,减少数据包丢失。

发展现状:

HTTP/3 目前仍处于标准化过程中,但已经得到了包括 Google、Facebook、Cloudflare 和 Akamai 等大型互联网公司的支持。许多现代浏览器如 Google Chrome 和 Mozilla Firefox 已经开始支持 HTTP/3。

性能上的优化和改进

  1. 无队头阻塞:HTTP/2 存在队头阻塞问题,即如果一个数据包丢失,整个TCP连接的数据传输都会受到影响,直到丢失的数据包被重传。而 QUIC 协议通过为每个数据流分配独立的序列号,解决了这一问题2。

  2. 减少连接建立时间:传统的 TCP 和 TLS(传输层安全性协议)握手需要多个往返时间(RTT),而 QUIC 通过内置 TLS 1.3 支持,可以在一个 RTT 内完成握手,甚至在某些情况下实现 0-RTT 连接建立2。

  3. 改善移动网络下的连接迁移:QUIC 通过使用连接 ID 而不是传统的四元组(IP 地址和端口号)来识别连接,使得在网络切换(如从 4G 切换到 Wi-Fi)时能够更平滑地迁移连接,减少了重连的需要2。

  4. 更高效的头部压缩:HTTP/3 使用了 QPACK 算法,这是对 HTTP/2 中 HPACK 算法的改进,解决了动态表同步的问题,提高了压缩效率2。

  5. 更好的多路复用支持:QUIC 协议支持在同一物理连接上并行传输多个独立的数据流,这与 HTTP/2 相似,但 QUIC 的实现更为高效2。

支持HTTP/3的容器

  • Undertow

    • Undertow 是一个灵活的高性能Web服务器,它是JBoss WildFly应用服务器默认的Web服务器。Undertow 2.2.0.Final 版本及以后开始支持HTTP/3。

  • Jetty

    • Jetty 是一个开源的servlet容器,它提供了Web服务器和javax.servlet API的实现。Jetty 11 版本开始支持HTTP/3,通过使用Jetty的ALPN和HTTP/3扩展。

  • Tomcat

    • Apache Tomcat 是一个流行的开源servlet容器,用于实现Java Servlet和JavaServer Pages(JSP)。虽然Tomcat本身不直接支持HTTP/3,但可以通过集成其他支持HTTP/3的组件(如使用HTTP/3代理)来实现HTTP/3支持。

  • Netty

    • Netty 是一个异步事件驱动的网络应用框架,用于快速开发可维护的高性能协议服务器和客户端。Netty 本身不直接支持HTTP/3,但可以通过添加HTTP/3编解码器和处理程序来实现HTTP/3支持。

  • Caddy

    • 虽然Caddy不是一个Java容器,但它是一个现代的、自动化的HTTPS服务器,支持HTTP/3。Caddy可以作为反向代理服务器,将HTTP/3流量转发到Java应用服务器。

  • Envoy

    • Envoy 是一个开源的边缘和服务代理,专为云原生应用设计。Envoy 支持HTTP/3,可以作为Java应用服务器的前端代理,处理HTTP/3流量。

  • Nginx:从版本 1.16.1 开始支持 HTTP/3。
  • Apache:从版本 2.4.39 开始支持 HTTP/3。

使用HTTP/3的注意事项

  • 客户端支持:确保客户端(如浏览器)支持HTTP/3。

  • 网络配置:网络基础设施(如防火墙和负载均衡器)需要支持UDP,因为HTTP/3基于QUIC,而QUIC使用UDP。

  • SSL/TLS证书:HTTP/3使用TLS 1.3进行加密,因此需要有效的SSL/TLS证书。




本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1834291.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

安泰电压放大器的选型原则是什么

电压放大器是电子电路中常用的一种器件,主要用于放大输入电压信号。在选型电压放大器时,需要考虑以下几个原则。 根据应用需求确定放大倍数。放大倍数是指输出电压与输入电压之间的倍数关系,也称为增益。不同的应用场景对放大倍数的要求不同&…

3个火火火的AI项目,开源了!

友友们,今天我要给你们安利三个超酷的开源项目,它们都和AI有关,而且每一个都能让你的日常生活变得更加有趣和便捷!(最近AI绘图又又超神了,分享以下美图养眼) 01 字节出品,文字转语音Seed-TTS 字节推出了一…

Ubuntu,Centos,Linux服务器安装Mellanox MCX653105A IB网卡HCA卡驱动

Mellanox 官方驱动下载地址 https://network.nvidia.com/products/infiniband-drivers/linux/mlnx_ofed/ 选择对应操作系统 官方链接速度比较慢,推荐个友商的下载地址 https://support.xfusion.com/support/#/zh/rack-servers/2288h-v5-pid-21872244/software …

【算法专题--链表】K个一组翻转链表 -- 高频面试题(图文详解,小白一看就懂!!!)

目录 一、前言 二、题目描述 三、解题方法 ⭐双指针 -- 采用哨兵位头节点 🥝 什么是哨兵位头节点? 🍍 案例图解 四、总结与提炼 五、共勉 一、前言 K个一组翻转链表 这道题,可以说是--链表专题--,最经典…

Java内存模型(JMM)详解

文章目录 1、Java内存模型2、JMM的核心概念1)主内存与工作内存2)内存可见性3)JMM的三大特性:原子性、可见性、有序性。 3、JMM中的八种操作4、Happens-before 规则5、样例: 1、Java内存模型 Java内存模型(…

电脑文件防泄密软件——天锐绿盾 - 中科数安—— 哪个好

在选择电脑文件防泄密软件时,天锐绿盾和中科数安都是值得考虑的选项。以下是对这两款软件的详细比较: www.drhchina.com PC地址: https://isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c5dfedee 功能全面性: 天锐…

QT工作笔记

文章目录 QDialog的accept()和reject()介绍QPushButton提示属性样式表QComboBox QDialog的accept()和reject()介绍 accept() 和reject() 这两个槽函数都会和close() 一样关闭dialogaccept() 关闭后 返回了Dialog::Acceptedreject() 关闭后 返回了Dialog::Rejected这样当我们需…

SpringBoot修改banner

在resources目录下创建banner.txt文件 到该网站下选择banner https://www.bootschool.net/ascii-art 点击拷贝: 粘贴到banner.txt中,保存 重新运行项目即可:

ES升级--03-- IK分词器

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 IK分词器1. IK分词器 下载https://github.com/infinilabs/analysis-ik/releases 2. 创建文件夹 analysis-ik3.把zip包放至该目录下 解压4. 删除zip包5、重启Elastic…

阿赵UE引擎C++编程学习笔记——C++自定义蓝图函数

大家好,我是阿赵。   使用UE引擎,大部分功能都可以使用蓝图的自带节点去完成。但有时候我们也需要扩展一些蓝图没有的功能。这一篇主要学习一下怎样用C给蓝图新增自定义的函数节点。 一、 新建蓝图函数库 在添加C类的时候,选择蓝图函数库&…

大数据的力量:推动战略决策和业务转型

在当前全球化的时代背景下,国际间的联系日益紧密,世界变得更加互联互通。面对各种危机,数据驱动决策和分析显得愈发重要。从医学研究到市场趋势分析,大数据技术在各个领域发挥着关键作用,推动着一场深刻的变革浪潮。 大…

初识数据库及Mysql安装管理

初识数据库及Mysql安装管理 了解数据库数据库的概念数据库的分类关系型数据库(SQL)非关系型的数据库(NoSQL) SQL语句SQL语言分类: MySQL中6种常见的约束: Mysql安装(CentOS7)源码编译…

mybatis中resultMap和resultType的区别

总结 基本映射 :(resultType)使用resultType进行输出映射,只有查询出来的列名和pojo中的属性名一致,该列才可以映射成功。(数据库,实体,查询字段,这些全部都得一一对应)…

gridview自带编辑功能如何判断用户修改的值的合法性

在使用GridView的编辑功能更新值时,确保输入的值合法性是十分重要的。为了实现这一点,你可以在GridView的RowUpdating事件中加入代码来检查用户输入的值。如果发现输入的值不合法,你可以取消更新操作并向用户显示错误消息。下面是如何实现的步…

ESP8266-01S烧录MQTT固件ERROR问题

今天在烧录ESP8266固件时遇到了这个问题,技术客服给了个有效的解决方案。 选择固件的时候可以先确认自己的模块是ESP8266或者EPS8285主控,这在选择DOWNLOADTOOL时还不一样。 然后波特率是115200,我在这个地方选错成1152000。 当然上面都不…

Proxy和definedProperty

1. Proxy 代理 定义: 用于定义基本操作的自定义行为 Proxy修改的是程序默认形为,就形同于在编程语言层面上做修改,属于元编程 元编程 是指某类计算机程序的编写,这类计算机程序编写或者操纵其它程序(或者自身)作为它…

Python 引入中文py文件

目录 背景 思路 importlib介绍 使用方法 1.导入内置库 importlib.util 2.创建模块规格对象 spec importlib.util.spec_from_file_location("example_module", "example.py") 3.创建模块对象 module importlib.util.module_from_spec(spec) …

全国产城市轨道交通运营公安AI高清视频监控系统

方案简介 城市轨道交通运营公安高清视频监控系统解决方案针对运营部门和公安部门的安保需求,选用华维视讯的各类前端和视频编解码、控制产品,通过统一平台提供视频监控服务和智能应用,满足轨道交通运营业主客运组织和抢险指挥的需求&#xff…

electron自定义标题栏的最大化,最小化,关闭窗口

渲染组件代码&#xff1a; <template><div class"window-btn"><i class"minimize" click"minimize"><img src"../assets/img/最小化.svg" alt"最小化" /></i><i v-if"!isMaximized&…

【YOLO模型训练时,减小批次大小(Batch Size)可能会加快训练速度】

文章目录 1.在使用YOLOv8进行目标检测模型训练时&#xff0c;减小批次大小&#xff08;Batch Size&#xff09;可能会加快训练速度。2. 这种现象主要与以下几个因素有关&#xff1a;1.显存限制&#xff08;GPU Memory Constraints&#xff09;&#xff1a;2.梯度累积&#xff0…