当前位置: 首页 > news >正文

HTTP/3 协议学习

前一篇

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证书。




相关文章:

  • 如何利用机器学习算法进行数据分析和挖掘,数据优化、预处理、特征提取等老板吩咐的工作
  • 自制HTML5游戏《开心消消乐》
  • Wireshark的基本用法以及注意事项
  • 速盾:高防服务器防御 DDoS 攻击的掩护技巧
  • 逆向学习网络篇:通过Socket建立连接并传输数据
  • 企业ERP系统规划图
  • 智慧公厕系统厂家的核心技术与光明源应用案例
  • 2020C++等级考试二级真题题解
  • oracle12c到19c adg搭建(五)dg搭建后进行切换19c进行数据字典升级
  • Java面试题:对比继承Thread类和实现Runnable接口两种创建线程的方法,以及它们的优缺点
  • 通信系统概述
  • 示例:WPF中在没有MouseDoubleClick的控件中如何识别双击
  • SVG 参考手册
  • 小熊文件工具箱免费版
  • 每天写java到期末考试(6.22)--集合5--练习
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • 10个最佳ES6特性 ES7与ES8的特性
  • angular组件开发
  • el-input获取焦点 input输入框为空时高亮 el-input值非法时
  • exif信息对照
  • express如何解决request entity too large问题
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • Less 日常用法
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • Node 版本管理
  • PHP 的 SAPI 是个什么东西
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • python大佬养成计划----difflib模块
  • Vue 2.3、2.4 知识点小结
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 动态魔术使用DBMS_SQL
  • 分享几个不错的工具
  • 深入 Nginx 之配置篇
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 思考 CSS 架构
  • 线性表及其算法(java实现)
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • ​马来语翻译中文去哪比较好?
  • #DBA杂记1
  • ${factoryList }后面有空格不影响
  • (WSI分类)WSI分类文献小综述 2024
  • (二)原生js案例之数码时钟计时
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (附源码)计算机毕业设计大学生兼职系统
  • (原)本想说脏话,奈何已放下
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • ******IT公司面试题汇总+优秀技术博客汇总
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .CSS-hover 的解释
  • .MyFile@waifu.club.wis.mkp勒索病毒数据怎么处理|数据解密恢复
  • .NET CORE 3.1 集成JWT鉴权和授权2
  • .Net Core与存储过程(一)