【知识点随笔分析 | 第六篇】HTTP/1.1,HTTP/2和HTTP/3的区别

news2024/11/25 22:46:53

前言:

        当今互联网已成为人们生活的重要组成部分,而HTTP协议(Hypertext Transfer Protocol)是支持Web通信的基础。随着Web技术的发展和互联网应用的不断增多,HTTP也在不断演进。本文旨在介绍HTTP的演变过程中的三个重要版本:HTTP 1.1HTTP 2HTTP 3

目录

前言:

​编辑

HTTP1.1:

优点:

缺点:

HTTP2:

针对HTTP1.1的改进:

缺点:

HTTP3:

总结:


HTTP1.1:

        HTTP 1.1(Hypertext Transfer Protocol 1.1)是一种用于客户端和服务器之间传输数据的协议。它是HTTP协议的第一个主要版本。HTTP 1.1于1999年发布,经过多年的广泛使用和改进。

优点:

  1. 持久连接:HTTP 1.1引入了持久连接,允许多个请求和响应在同一个TCP连接上进行。这样可以减少连接的建立和关闭所需的时间和资源,提高性能。

  2. 管道化:HTTP 1.1支持管道化,允许客户端在一个连接上同时发送多个请求,而无需等待之前的响应。这样可以减少延迟并提高效率。

  3. 分块传输编码:HTTP 1.1支持分块传输编码(Chunked Transfer Encoding),允许服务器将响应分成多个块进行发送。这样在传输较大的响应时可以逐步发送,而不需要等待整个响应生成完毕。

  4. 缓存控制:HTTP 1.1引入了更强大的缓存控制机制,包括缓存的验证、过期和重新验证机制。这样可以减少对服务器的请求,提高性能。

  5. 虚拟主机支持:HTTP 1.1支持虚拟主机,可以通过在请求头中发送Host字段来区分不同的主机。这样可以在同一个IP地址上运行多个网站,提高服务器资源的利用率。

总的来说,HTTP 1.1在之前的版本基础上进行了一系列的改进和优化,提高了性能和效率,使得网页加载速度更快和更可靠。它目前仍然是互联网上最常用的HTTP协议版本之一。

        而管道化这项技术可谓是狠狠的拷打了前后端开发人员,因为管道化后虽然可以同时发送多个请求,但是在接收请求的时候,必须按照发送时的顺序来进行接收,如果此时有包丢失,那么就会陷入队头阻塞的情况,反映到用户界面,就是网站页面一直打不开。而这种网络协议层的问题,我们只能通过开发人员来解决。

而很多网站为了解决这个问题,都会采用以下类似技术:

        1.把多个资源放到一个包里,例如本来三张图片要打包为三个包进行发送,为了尽可能减少队头阻塞的情况,我们就把这三个图片放到一张图片,只发送这集成后的单张图片,由前端人员进行裁剪

        2.把图片资源进行base64编码,直接内嵌到HTML代码中,这样在请求的时候就可以不用请求这个资源。

        3.为每个图片都设置一个图片域名,这样浏览器在接收的时候就可以同时接收,减少了队头阻塞造成的影响

        4.内嵌CSS,JS代码到HTML代码中

而以上几种方法虽然可行,但是也大大增加了开发人员的工作量,使得开发人员的精力无法几种放在开发需求上。

缺点:

  1. 性能限制:HTTP 1.1采用了串行的请求-响应模型,每个请求都需要建立一个独立的连接,响应也必须按照请求的顺序进行返回。这种方式限制了并发性能和吞吐量,尤其在处理大量资源时。

  2. 延迟问题:由于HTTP 1.1无法在同一个连接上同时发送多个请求,需要等待一个请求的响应后才能发送下一个请求,这导致了一定的延迟,尤其是在高延迟的网络环境下。

  3. 头部冗余:HTTP 1.1在每个请求和响应中都需要携带大量的头部信息,而这些头部信息在每个请求和响应中可能是重复的,造成了不必要的数据传输和浪费。

  4. 安全性问题:HTTP 1.1的通信是明文传输,容易被窃听者拦截并窃取敏感信息。此外,没有内置的加密机制也使得HTTP 1.1易受到中间人攻击等安全威胁。

  5. 无法有效利用多核处理器:由于HTTP 1.1的请求-响应模型,每个请求都需要依次处理,无法充分利用多核处理器的优势,影响了处理性能和效率。

 尤其是在后来,随着各家浏览器需要使用HTTPS,也就是需要给HTTP利用TLS上锁,上锁所导致的TLS开销使得HTTP1.1更是雪上加霜,就这样在千呼万唤中,HTTP2闪亮登场!

HTTP2:

        HTTP2(Hypertext Transfer Protocol version 2)是HTTP协议的第二个主要版本,于2015年发布。它是对HTTP 1.1的重大升级,旨在提高性能、安全性和效率。

针对HTTP1.1的改进:

  1. 二进制分帧(Binary Framing):HTTP/2使用二进制格式对数据进行分帧传输,取代了HTTP 1.1使用的文本格式。这种方式更高效地处理和传输数据,减少了延迟和带宽的消耗。

  2. 多路复用(Multiplexing):HTTP/2引入了多路复用的机制,允许在同一个TCP连接上进行并发的请求和响应。这意味着客户端可以同时发送多个请求,并且服务器可以以任意的顺序并发地返回响应,提高了并发性能和资源利用率。

  3. 头部压缩(Header Compression):HTTP/2使用了HPACK算法对请求和响应的头部进行压缩。这大幅减小了传输的数据量,降低了延迟和带宽的消耗。

  4. 服务器推送(Server Pushing):HTTP/2引入了服务器推送的机制,允许服务器在接收到一个请求后主动向客户端推送相关的资源,而无需客户端明确请求。这提高了页面加载的速度和性能。

  5. 流量优先级(Stream Prioritization):HTTP/2引入了流(Stream)和优先级(Priority)的概念,允许对不同的请求设置不同的优先级。这样可以更精确地控制和管理请求和响应的顺序,优化响应时间和用户体验。

  6. 支持加密(Encryption Support):HTTP/2推荐使用TLS(Transport Layer Security)加密传输数据,增加了通信的安全性,保护用户隐私和数据完整性。

通过这些改进,HTTP/2大幅提升了网页加载速度、并发性能和用户体验。它已经被广泛支持和采用,成为了现代Web应用的重要基础协议之一。

        HTTP2中引进的服务器推送机制,看起来很优秀,大大减少了请求响应次数,但是却存在一个明显的漏洞:

每一次点进网页之后,服务器都会主动向客户端推送相关资源,这明显就是一个不平衡的杠杆关系,我们用少量客户端就可以撬动服务器大量资源的推送,这就是可以可以进行DDOS攻击的窗口。

缺点:

  1. 需要升级的基础设施:使用HTTP/2需要服务器和客户端同时支持该协议。对于大规模和复杂的系统,升级和配置相关的基础设施可能需要一定的时间和资源。

  2. 复杂性增加:HTTP/2的引入增加了协议的复杂性。它涉及了新的概念、算法和协议机制,这可能对开发者和系统管理员的学习和实施产生一定的挑战。

  3. 兼容性问题:尽管HTTP/2已经被广泛采用,但仍然存在一些旧版本的浏览器和服务器不支持HTTP/2。为了确保兼容性,需要进行适当的检测和回退策略。

  4. TCP层面的队头阻塞:HTTP/2解决了HTTP层面的队头阻塞,但在TCP层面仍然面临潜在的队头阻塞问题。TCP的阻塞控制机制可能导致整个连接的数据传输受到阻塞,从而影响性能。

  5. 加密的资源消耗:由于HTTP/2推荐使用加密的传输层(TLS),这增加了服务器端处理和客户端解密的计算和资源消耗。这可能对一些资源受限的环境和设备产生一定的影响。

  6. 安全性问题:尽管HTTP/2支持加密传输,但错误配置或实施可能导致安全性降低。因此,正确地配置和管理TLS实现对于确保通信的安全至关重要。

尽管存在一些挑战和考虑因素,HTTP/2作为现代Web应用的重要协议,仍然在提供更好的性能和用户体验方面具有很大的优势。正确地评估和应用HTTP/2,并与其他相关技术和最佳实践结合使用,可以帮助最大程度地发挥其优势并解决潜在的缺点。

而为了解决HTTP2存在的这些问题,HTTP3应运而生

HTTP3:

        HTTP/3被称为HTTP over QUIC(QUIC即Quick UDP Internet Connections)。与之前的版本不同,HTTP/3采用了全新的传输层协议QUIC来进行数据传输。

【知识点随笔分析 | 第五篇】简单介绍什么是QUIC-CSDN博客

HTTP/3的设计目标是提供更快、更安全、更可靠的Web通信体验。它使用UDP协议,而不是基于TCP的传统HTTP协议,这是为了克服TCP在高丢包和高延迟的网络环境下的性能限制。QUIC协议在传输层提供了更好的错误恢复机制和拥塞控制算法,以减少网络延迟和提高数据传输的效率。

具体来说,HTTP/3引入了以下主要特性和改进:

  1. 快速连接建立:QUIC使用握手过程中的0-RTT和1-RTT模式,可以更快地建立连接和进行安全验证,提高了页面加载速度。
  2. 多路复用:HTTP/3支持多个请求和响应在同一连接上进行并发传输,允许更高效的资源利用和更低的延迟。
  3. 数据流优化:通过引入流量优先级和头部压缩技术,HTTP/3可以更有效地传输数据,减少带宽占用和网络拥塞。
  4. 错误恢复:QUIC提供了更强大的错误恢复机制,可以更快地恢复丢失的数据,提供更可靠的通信质量。
  5. 安全性增强:HTTP/3使用了基于TLS的加密机制来保护通信的安全性和隐私性,确保数据传输的完整性和机密性。

总的来说,HTTP/3通过引入QUIC协议和一系列改进,旨在提供更好的性能、效率和安全性。它解决了传统TCP协议在高丢包和高延迟网络环境下的不足,推动了Web通信的进一步发展。随着HTTP/3的逐渐普及和应用,用户可以期待更快、更流畅的Web体验。

总结:

HTTP 1.1在传输数据时存在诸多局限性,如多个并发请求的有序处理、高延迟和头部的冗余重复等。为了克服这些问题,HTTP标准制定机构和互联网工程任务组(IETF)发起了HTTP 2的开发。

HTTP 2以性能为中心,引入了一系列改进,旨在提高Web应用的加载速度和效率。它采用二进制协议替代了HTTP 1.1中的文本格式,引入了新的特性如多路复用、头部压缩、服务器推送和流量优先级等。这些改进使得在浏览器与服务器之间进行更有效的数据传输,提供更快的页面加载速度和更好的用户体验。

然而,随着互联网的发展,新的需求和挑战也出现了。传统的基于TCP的HTTP协议在面对高丢包和高延迟的网络环境时表现不佳。为了应对这些问题,HTTP 3应运而生。HTTP 3引入了QUIC(Quick UDP Internet Connections)协议,基于UDP协议来传输HTTP数据,通过新的传输层解决方案提供更可靠和高效的通信。HTTP 3有效地解决了高丢包和高延迟的网络环境下的性能问题,推动了Web的进一步发展。

如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力!

69e9169c980f43e0aad31ff9ada88a9c.png

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

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

相关文章

【Godot4.1】Godot实现闪烁效果(Godot使用定时器实现定时触发的效果)

文章目录 准备工作创建Sprite2D创建Timer节点 编写脚本完整代码运行效果 准备工作 如果你希望配置C#编写脚本,可以查看如下教程: Godot配置C#语言编写脚本 创建Sprite2D 首先弄一个用于显示的Sprite2D,右键单击任意节点,然后选…

Transformer在小目标检测上的应用

本篇文章是博主在AI、无人机、强化学习等领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对人工智能等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅解。文章分类在AI学…

mysql双主互从通过KeepAlived虚拟IP实现高可用

mysql双主互从通过KeepAlived虚拟IP实现高可用 在mysql 双主互从的基础上, 架构图: Keepalived有两个主要的功能: 提供虚拟IP,实现双机热备通过LVS,实现负载均衡 安装 # 安装 yum -y install keepalived # 卸载 …

反向输出一个三位数

系列文章目录 进阶的卡莎C++_睡觉觉觉得的博客-CSDN博客数1的个数_睡觉觉觉得的博客-CSDN博客双精度浮点数的输入输出_睡觉觉觉得的博客-CSDN博客足球联赛积分_睡觉觉觉得的博客-CSDN博客大减价(一级)_睡觉觉觉得的博客-CSDN博客小写字母的判断_睡觉觉觉得的博客-CSDN博客纸币(…

手把手教你完成(Java)师生信息管理系统

手把手教你完成(Java)师生信息管理系统 对阶段一学到的知识进行应用,完成练手小项目。同时,也可以当做学校的课设来做。项目已上传 CSDN ,可以按需下载。 一、成果展示 添加学生(查看学生) 删除…

计算机毕业设计 基于SSM的宿舍管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

【C进阶】指针笔试题解析

做题之前我们再来回顾一下 对于数组名的理解:除了以下两种情况,数组名表示的都是数组首元素的地址 (1)sizeof(数组名):这里的数组名表示整个数组 (2)&(数…

关掉在vscode使用copilot时的提示音

1. 按照图示的操作File --> Preferences --> Settings 2. 搜索框输入关键字Sound,因为是要关掉声音,所以找有关声音的设置 3. 找到如下图所示的选项 Audio Cues:Line Has Inline Suggetion,将其设置为Off 这样,就可以关掉suggest code时…

使用 Python 给 PDF 添加目录书签

0、库的选择——pypdf 原因:Python Version Support Python 3.11 3.10 3.9 3.8 3.7 3.6 2.7 pypdf>3.0 YES YES YES YES YES YES PyPDF2>2.0 YES YES YES YES YES YES PyPDF2 1.20.0 - 1.28.4 YES YES YES YES YES YES P…

【JAVA】为什么要使用封装以及如何封装

个人主页:【😊个人主页】 系列专栏:【❤️初识JAVA】 前言 Java的封装指的是在一个类中将数据和方法进行封装,使其可以保护起来,只能在该类内部访问,而不允许外部直接访问和修改。这是Java面向对象编程的三…

Python3学习笔记——第一章:基础入门

Python3 有段时间没摸Python了,浏览了一下菜鸟教程,巩固一下基础吧。 Python3学习笔记——第一章:基础入门 文章目录 Python3一、Python3 简介二、Python的安装三、查看 Python 版本四、第一个Python3程序 一、Python3 简介 讲几个对编程有…

【Cesium创造属于你的地球】相机系统

相机系统里面有setView,flyTo,lookAt,viewBoundingsphere这几种方法,以下是相关的使用方法,学起来!!! setView 该方法可以直接切换相机视口,从而不需要通过一个飞入的效…

【Java】什么是继承

目录 什么是继承 继承关系图 idea如何生成继承类图 继承优缺点 什么情况下使用继承模式呢? 继承中变量的访问特点 什么是继承 继承是面向对象的三大特征之一,可以使得子类具有父类的属性和方法,还可以在子类中重新定义、追加属性和方法…

蓝桥杯Python scratch C++选拔赛stema个人如何报名?

如果不会操作,可以微信makytony协助。

阅读LINGO-1: Exploring Natural Language for Autonomous Driving

1 背景2 Motivation3 具体过程 1 背景 wayve在9月14日公布了大语言模型和自动驾驶的结合模型LINGO-1,可以用自然语言解释自动驾驶的决策原因。 网页链接:https://wayve.ai/thinking/lingo-natural-language-autonomous-driving/ 但是目前没有论文和开源…

【牛客网】JZ39 数组中出现次数超过一半的数字

题目 思路 思路1 将数组排序,再保证有结果的情况下,此时数组中间的数字就是想要的结果 思路2 在保证有结果的情况下,此时数组的的众数是数组长度的一半以上 所以我们可以通过抵消的做法来找到最终的结果 我们可以从头遍历这个数组,如果两个数不相同,则消去这两个数,最坏的…

SpringBoot的学习

代码书写:耦合度偏高 解决方法:使用对象时,在程序中不要主动使用new产生对象,转换为由外部提供对象——IcC控制反转 IoC(Inversion of Control)控制反转 使用对象时,由主动new产生对象转换为…

链式二叉树的基本操作实现

💓博主csdn个人主页:小小unicorn ⏩专栏分类:数据结构 🚚代码仓库:小小unicorn的代码仓库🚚 🌹🌹🌹关注我带你学习编程知识 链式二叉树基本操作 二叉树节点设置二叉树的深…

RabbitMQ学习笔记(消息发布确认,死信队列,集群,交换机,持久化,生产者、消费者)

MQ(message queue):本质上是个队列,遵循FIFO原则,队列中存放的是message,是一种跨进程的通信机制,用于上下游传递消息。MQ提供“逻辑解耦物理解耦”的消息通信服务。使用了MQ之后消息发送上游只…

MySQL - mysql服务基本操作以及基本SQL语句与函数

文章目录 操作mysql客户端与 mysql 服务之间的小九九了解 mysql 基本 SQL 语句语法书写规范SQL分类DDL库表查增 mysql数据类型数值类型字符类型日期类型 示例修改(表操作) DML添加数据删除数据修改数据 DQL查询多个字段条件查询聚合函数分组查询排序查询…