HTTP/2 和 HTTP/3 是 HTTP 协议的升级版本,主要为了解决 HTTP/1.x 协议的性能瓶颈和安全性问题。以下是它们的主要目标和解决的问题:

HTTP/2 的主要目标和解决的问题

1. 性能优化

  • 多路复用(Multiplexing):

    • HTTP/1.x 中,每个请求需要单独建立一个 TCP 连接,或者使用持久连接(Keep-Alive)但仍然是串行处理请求。
    • HTTP/2 允许在同一个 TCP 连接上并行发送多个请求和响应,减少了延迟。
  • 头部压缩(Header Compression):

    • HTTP/1.x 的头部信息是纯文本,且每次请求都会重复发送相同的头部(如 User-Agent、Cookie 等)。
    • HTTP/2 使用 HPACK 算法对头部进行压缩,减少了数据传输量。
  • 服务器推送(Server Push):

    • HTTP/2 允许服务器在客户端请求之前主动推送资源(如 CSS、JavaScript 文件),减少了额外的请求延迟。

2. 安全性

  • HTTP/2 通常基于 HTTPS(TLS/SSL)运行,强制加密传输数据,提高了安全性。

3. 二进制协议

  • HTTP/1.x 是基于文本的协议,解析效率较低。
  • HTTP/2 使用二进制格式传输数据,解析效率更高,减少了错误。

HTTP/3 的主要目标和解决的问题

1. 基于 QUIC 协议

  • HTTP/3 使用 QUIC 协议代替 TCP,解决了 TCP 的一些固有缺陷:**

    • 队头阻塞(Head-of-Line Blocking):

      • 在 HTTP/2 中,如果 TCP 连接中的一个数据包丢失,整个连接会被阻塞,直到丢失的数据包重传成功。
      • QUIC 基于 UDP,每个流(Stream)独立处理,避免了队头阻塞。
    • 连接迁移:
      • QUIC 使用连接 ID 而不是 IP 地址和端口来标识连接,当用户切换网络(如从 Wi-Fi 切换到移动数据)时,连接可以无缝迁移。

2. 更快的连接建立

  • QUIC 集成了 TLS 1.3,减少了握手次数,连接建立速度更快。
  • 在 HTTP/2 中,TCP 和 TLS 需要分别握手,增加了延迟。

3. 改进的拥塞控制

  • QUIC 提供了更灵活的拥塞控制机制,能够更好地适应不同的网络环境。

4. 安全性

  • HTTP/3 强制使用 TLS 1.3,确保数据传输的安全性。

总结

  • HTTP/2 主要解决了 HTTP/1.x 的性能瓶颈,通过多路复用、头部压缩和服务器推送提高了性能。
  • HTTP/3 进一步优化了性能,通过基于 QUIC 协议解决了 TCP 的队头阻塞问题,并提供了更快的连接建立和连接迁移功能。

http2和http3的更多相关文章

  1. HTTP1.1、HTTP2、HTTP3 演变

    推荐阅读:https://www.cnblogs.com/zwtblog/tag/计算机网络/ 目录 HTTP 基本概念 HTTP/1.1 相⽐ HTTP/1.0 提⾼了什么性能? HTTP/1.1如 ...

  2. QUIC/HTTP3 协议简析

    从 HTTP 的进化历史讲起,细说使用协议的变迁,了解原因发现问题,解码 QUIC 在 HTTP3 中的支撑作用,共同探讨 HTTP3 的未来. HTTP.HTTP2 和 HTTP3 先和大家来回顾一 ...

  3. 初识——HTTP3

    目录 初识--HTTP3 HTTP HTTP1.0和HTTP1.1的主要区别 HTTP2 HTTP3 相关链接 初识--HTTP3 想了解HTTP3??那我们就得先知道为啥会出现HTTP3,因此我们需 ...

  4. Httpd2.2常见配置及功能

    Httpd 2.2常见配置 要配置http服务的配置文件,先备份一下,养成良好习惯,如果误操作导致http服务起不来,就可以将备份的主配置文件重新覆盖一下 httpd配置文件的组成:有三大部分组成,其 ...

  5. 图文详解互联网根基之HTTP

    这是本人对<图解HTTP>和<HTTP权威指南>阅读后总结的大家常用的.重要的知识点,前端.后端同学居家必备! 一.概述 HTTP是Hyper Text Transfer Pr ...

  6. 【转】使用Jmeter录制web脚本

    1.web性能测试以及web http请求基本原理. 再介绍录制jmeter脚本之前,我们先谈一下web性能测试.web就是调用http/https接口, 其实没有是什么复杂度可言.只是我们必须清楚, ...

  7. 7.HTTP协议

    1.什么是url? 1.1 URL是统一资源定位符,表示的是一个资源,(图片 文字 视频 音频 等等) 单个资源介绍--图片 那URL的组成部分是由协议, 域名:端口, 路径和文件名 1.2 url组 ...

  8. HTTP/2和Python的支持现状-2019-10

    背景: 大概2019年9月份,天猫全面升级了HTTP/2的支持,并且加强了HTTP/1的访问限制,也可能很早前就这么做了, 但之前一直没限制HTTP/1的访问.之所以发现这个问题,是因为写的爬虫突然失 ...

  9. 7.Jmeter 快速入门教程--录制复杂web测试脚本

    Jmeter的功能简单,不需要有脚本语言的编写经验,纯图形界面添加测试场景, 用起来上手很快.但是如果手动添加每一个web(http/https)请求,费时又费力.而且有可能最后手动编写的和实际发的请 ...

  10. 浅谈 k8s ingress controller 选型

    大家好,先简单自我介绍下,我叫厉辉,来自腾讯云.业余时间比较喜欢开源,现在是Apache APISIX PPMC.今天我来简单给大家介绍下 K8S Ingress 控制器的选型经验,今天我讲的这些内容 ...

随机推荐

  1. 俄罗斯方块-shell脚本写的,学习学习

    #!/bin/bash APP_NAME="${0##*[\\/]}" APP_VERSION="1.0" #颜色定义 iSumColor=7 #颜色总数 cR ...

  2. 【整活向】把tidb的文档塞给了基于oceanbase的RAG机器人

    最近官方推出了免费试用365天的云数据库,版本也升级到了4.3.支持了向量功能. 官方推出了活动体验AI的动手实战活动, 教程中使用了docker单机版数据库,既然有免费的云数据库,就优先使用云数据库 ...

  3. Dev Express WPF 在当前界面显示进度加载等待信息

    执行耗时任务时,为提高用户体验,一般会添加进度状态信息.Dev Express 的 LoadingDecorator 可以实现在当前界面中显示进度信息. 效果图如下: 默认 LoadingDecora ...

  4. QT5笔记:6. QT 与 C++

    QT 对标准的C++进行了扩展,引入了一些新的概念和功能 QT 的元对象编译器(Meta-Object Compiler, MOC)是一个预处理器,它预处理QT项目,先将QT的一些特性代码转换为标准的 ...

  5. Processing多窗口程序范例(三)

    再来一例~另一种叠加方式呈现...看图: 程序 主程序: package syf.demo.multiwindow3; import processing.core.PApplet; import p ...

  6. 远程debug

    1. 在idea中添加远程服务器信息 打开应用配置 填写配置 1. 在 + 选择 Remote JVM Debug 2. 在 2 处填写名称,任意 3. 在 3 填写服务器ip 4. 在 4 填写de ...

  7. C++中线程同步与互斥的四种方式介绍及对比详解

    引言 在C++中,当两个或更多的线程需要访问共享数据时,就会出现线程安全问题.这是因为,如果没有适当的同步机制,一个线程可能在另一个线程还没有完成对数据的修改就开始访问数据,这将导致数据的不一致性和程 ...

  8. 关于能否用DeepSeek做危险的事情,DeepSeek本身给出了答案

    AI教父辛顿说DeepSeek允许本地部署的话可能会导致用户用DeepSeek来做一些危险的事情(https://t.cj.sina.com.cn/articles/view/7879923924/m ...

  9. NumPy学习12

    今天学习了 22, NumPy矩阵乘法 23, NumPy IO操作 numpy_test12.py : import numpy as np ''' 22, NumPy矩阵乘法 矩阵乘法是将两个矩阵 ...

  10. Linux下磁盘分区调整(在不使用LVM的情况下)

    当硬盘分区不使用LVM的时候,将不能使用lvresize等指令调整 在调整分区之前,先来了解一下当前的磁盘分区信息1:使用Fdisk指令查看后发现sda1的分区有195309568个Sectors(扇 ...